Skip to content

Keycloak JavaScript Adapter โ€‹

js
await keycloak.init({
    flow: 'standard', // implicit, hybrid
    pkceMethod: 'S256',
    onLoad: 'check-sso'
});

keycloak-js๋Š” ํ‚คํด๋ก ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์— ๋Œ€ํ•ด Implicit Flow ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด ํ† ํฐ์„ ๋ฐ”๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๊ฒฝ์šฐ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  updateToken ํ•จ์ˆ˜๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Authorization Code Flow๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆํ•ด์•ผํ•œ๋‹ค.

ํ”„๋ก ํŠธ ์ฑ„๋„ ์ธ์ฆ์— ๋Œ€ํ•œ ๋ณด์•ˆ ์ด์Šˆ โ€‹

Authorization Code Flow ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Implicit Flow ๋Š” ํ‚คํด๋ก์—์„œ ๋ฐœ๊ธ‰๋œ ํ† ํฐ ์ •๋ณด๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ฃผ์†Œ์— ํฌํ•จ๋˜๋ฏ€๋กœ ์ธํ”„๋ผ ๊ตฌ์„ฑ๊ณผ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์— ๋”ฐ๋ผ ํ† ํฐ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜๊ฑฐ๋‚˜ ๊ฐ€๋กœ์ฑ„์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ณด์•ˆ ๊ด€์ ์— ๋”ฐ๋ผ ๋ฐฑ ์ฑ„๋„๋กœ ์ธ์ฆ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ฒ€ํ† ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€ ํ”„๋ก ํŠธ ์ฑ„๋„์—์„œ Authorization Code Flow๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ‚คํด๋ก์—์„œ Capability config์˜ Client authentication ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ Authorization ์„ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์—†๋‹ค.

ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ƒ์„ธ ๊ถŒํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ํ•˜๊ธฐ โ€‹

ํ”„๋ก ํŠธ ์ฑ„๋„์˜ Authorization Code Flow ์—์„œ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ Advanced ์„ค์ •์—์„œ OpenID Connect Compatibility Modes ์˜ Use refresh tokens ๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Settings โ†’ Capacity Config โ€‹

  • Client authentication ๋น„ํ™œ์„ฑํ™”
  • Authentication flow์˜ Standard flow ํ™œ์„ฑํ™”
Advanced โ†’ OpenID Connect Compatibility Modes โ€‹

  • Use refresh tokens ํ™œ์„ฑํ™”
  • Advanced Settings์˜ Proof Key for Code Exchange Code Challenge Method๋ฅผ S256๋กœ ์„ ํƒ

Released under the MIT License.