5 λΆ„ μ†Œμš”

κ°œμš”

κΆŒν•œ λΆ€μ—¬ μœ ν˜•

  • κΆŒν•œλΆ€μ—¬λž€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•΄μ„œ μ‚¬μš©μžμ˜ μŠΉμΈν•˜μ— μΈκ°€μ„œλ²„λ‘œλΆ€ν„° κΆŒν•œμ„ λΆ€μ—¬λ°›λŠ” 것을 μ˜λ―Έν•œλ‹€
  • OAuth 2.0 λ©”μ»€λ‹ˆμ¦˜μ€ μ•„λž˜μ™€ 같은 κΆŒν•œ λΆ€μ—¬ μœ ν˜•λ“€μ„ μ§€μ›ν•˜κ³  있으며 μΌλΆ€λŠ” Depreacted λ˜μ—ˆλ‹€


  1. Authorization Code Grant Type
    • κΆŒν•œ μ½”λ“œ λΆ€μ—¬ νƒ€μž…, μ„œλ²„ μ‚¬μ΄λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜(μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜), λ³΄μ•ˆμ— κ°€μž₯ μ•ˆμ „ν•œ μœ ν˜•
  2. Implicit Grant Type (Deprecated)
    • μ•”μ‹œμ  λΆ€μ—¬ νƒ€μž…, 곡개 ν΄λΌμ΄μ–ΈνŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ (SPA 기반 μžλ°”μŠ€ν¬λ¦½νŠΈ μ•±, λͺ¨λ°”일 μ•±), λ³΄μ•ˆμ— μ·¨μ•½
  3. Resource Owner Password Credentials Grant Type (Deprecated)
    • λ¦¬μ†ŒμŠ€ μ‚¬μš©μž λΉ„λ°€λ²ˆν˜Έ 자격증λͺ… λΆ€μ—¬ νƒ€μž…, μ„œλ²„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜, λ³΄μ•ˆμ— μ·¨μ•½
  4. Client Credentials Grant Type
    • ν΄λΌμ΄μ–ΈνŠΈ 자격 증λͺ… κΆŒν•œ λΆ€μ—¬ νƒ€μž… , UI or 화면이 μ—†λŠ” μ„œλ²„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜
  5. Refresh Token Grant Type
    • μƒˆλ‘œκ³ μΉ¨ 토큰 λΆ€μ—¬ νƒ€μž…, Authorization Code, Resource Owner Password Type μ—μ„œ 지원
  6. PKCE-enhanced Authorization Code Grant Type
    • PKCE κΆŒν•œ μ½”λ“œ λΆ€μ—¬ νƒ€μž… , μ„œλ²„ μ‚¬μ΄λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜, 곡개 ν΄λΌμ΄μ–ΈνŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜

κΆŒν•œ λΆ€μ—¬ 흐름 선택 κΈ°μ€€

image

맀개 λ³€μˆ˜ μš©μ–΄

  1. client_id
    • μΈκ°€μ„œλ²„μ— λ“±λ‘λœ ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•΄ μƒμ„±λœ 고유 ν‚€
  2. client_secret
    • μΈκ°€μ„œλ²„μ— λ“±λ‘λœ νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈμ˜ client_id 에 λŒ€ν•΄ μƒμ„±λœ λΉ„λ°€ κ°’
  3. response_type
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κΆŒν•œ λΆ€μ—¬ μ½”λ“œ 흐름을 μ‹œμž‘ν•˜κ³  μžˆμŒμ„ 인증 μ„œλ²„μ— μ•Œλ €μ€€λ‹€
    • code, token, id_token 이 있으며 token, id_token 은 implicit κΆŒν•œλΆ€μ—¬μœ ν˜•μ—μ„œ 지원해야 ν•œλ‹€
    • μ„œλ²„κ°€ 쿼리 λ¬Έμžμ—΄μ— 인증 μ½”λ“œ(code), 토큰(token, id_token) 등을 λ°˜ν™˜
  4. grant_type
    • κΆŒν•œ λΆ€μ—¬ νƒ€μž… μ§€μ • - authorization_code, password, client_credentials, refresh_token
  5. redirect_uri
    • μ‚¬μš©μžκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„±κ³΅μ μœΌλ‘œ μŠΉμΈν•˜λ©΄ κΆŒν•œ λΆ€μ—¬ μ„œλ²„κ°€ μ‚¬μš©μžλ₯Ό λ‹€μ‹œ μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ¦¬λ””λ ‰μ…˜ν•œλ‹€
    • redirect_uri κ°€ 초기 κΆŒν•œ λΆ€μ—¬ μš”μ²­μ— ν¬ν•¨λœ 경우 μ„œλΉ„μŠ€λŠ” 토큰 μš”μ²­μ—μ„œλ„ 이λ₯Ό μš”κ΅¬ν•΄μ•Ό ν•œλ‹€.
    • 토큰 μš”μ²­μ˜ redirect_uri λŠ” 인증 μ½”λ“œλ₯Ό 생성할 λ•Œ μ‚¬μš©λœ redirect_uri 와 μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ„œλΉ„μŠ€λŠ” μš”μ²­μ„ κ±°λΆ€ν•΄μ•Ό ν•œλ‹€.
  6. scope
    • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©μž 데이터에 μ ‘κ·Όν•˜λŠ” 것을 μ œν•œν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€ – email profile read write..
    • μ‚¬μš©μžμ— μ˜ν•΄ νŠΉμ • μŠ€μ½”ν”„λ‘œ μ œν•œλœ κΆŒν•œ μΈκ°€κΆŒμ„ λ°œν–‰ν•¨μœΌλ‘œμ¨ 데이터 접근을 μ œν•œν•œλ‹€
  7. state
    • μ‘μš© ν”„λ‘œκ·Έλž¨μ€ μž„μ˜μ˜ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  μš”μ²­μ— ν¬ν•¨ν•˜κ³  μ‚¬μš©μžκ°€ 앱을 μŠΉμΈν•œ ν›„ μ„œλ²„λ‘œλΆ€ν„° λ™μΌν•œ 값이 λ°˜ν™˜λ˜λŠ”μ§€ 확인해야 ν•œλ‹€.
    • 이것은 CSRF 곡격 을 λ°©μ§€ν•˜λŠ” 데 μ‚¬μš©λœλ‹€


Authorization Code Grant Type

κ°œμš”

  1. 흐름 및 νŠΉμ§•
    1. μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μŠΉμΈν•˜λ©΄ μΈκ°€μ„œλ²„λŠ” Redirect URI 둜 μž„μ‹œ μ½”λ“œ λ‹΄μ•„μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ‹€μ‹œ λ¦¬λ‹€μ΄λ ‰μ…˜ν•œλ‹€
    2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•΄λ‹Ή μž„μ‹œ μ½”λ“œλ₯Ό μΈκ°€μ„œλ²„λ‘œ μ „λ‹¬ν•˜κ³  μ•‘μ„ΈμŠ€ ν† ν°μœΌλ‘œ κ΅ν™˜ν•œλ‹€
    3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ•‘μ„ΈμŠ€ 토큰을 μš”μ²­ν•  λ•Œ ν•΄λ‹Ή μš”μ²­μ„ ν΄λΌμ΄μ–ΈνŠΈ μ•”ν˜Έλ‘œ 인증할 수 μžˆμœΌλ―€λ‘œ κ³΅κ²©μžκ°€ 인증 μ½”λ“œλ₯Ό κ°€λ‘œμ±„μ„œ 슀슀둜 μ‚¬μš©ν•  μœ„ν—˜μ΄ 쀄어듬
    4. μ•‘μ„ΈμŠ€ 토큰이 μ‚¬μš©μž λ˜λŠ” λΈŒλΌμš°μ €μ— ν‘œμ‹œλ˜μ§€ μ•Šκ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ‹€μ‹œ μ „λ‹¬ν•˜λŠ” κ°€μž₯ μ•ˆμ „ν•œ λ°©λ²•μ΄λ―€λ‘œ 토큰이 λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ λˆ„μΆœλ  μœ„ν—˜μ΄ 쀄어듬
  2. κΆŒν•œλΆ€μ—¬μ½”λ“œ μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • response_type=code (ν•„μˆ˜)
    • client_id (ν•„μˆ˜)
    • redirect_uri (선택사항)
    • scope (선택사항)
    • state (선택사항)
  3. μ•‘μ„ΈμŠ€ν† ν° κ΅ν™˜ μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • grant_type=authorization_code (ν•„μˆ˜)
    • code (ν•„μˆ˜)
    • redirect_uri (ν•„μˆ˜ : λ¦¬λ‹€μ΄λ ‰μ…˜ URL이 초기 승인 μš”μ²­μ— ν¬ν•¨λœ 경우)
    • client_id (ν•„μˆ˜)
    • client_secret (ν•„μˆ˜)

흐름

  1. authorization code μš”μ²­ : μΈκ°€μ„œλ²„μ—κ²Œ code λ₯Ό μš”μ²­ν•œλ‹€ image
  2. μ‚¬μš©μž 인증 & λ™μ˜ν•˜κΈ° : μ‚¬μš©μžμ˜ 승인 및 λ™μ˜ν•˜μ— μΈκ°€μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ½”λ“œλ₯Ό λ°œκΈ‰ν•œλ‹€ image
  3. Redirect 및 Access Token κ΅ν™˜ μš”μ²­ : ν΄λΌμ΄μ–ΈνŠΈμ˜ κΆŒν•œ λΆ€μ—¬κ°€ 승인되고 κ·Έ 결과둜 토큰을 νšλ“ν•œλ‹€ image

image


Implicit Grant

κ°œμš”

  1. 흐름 및 νŠΉμ§•
    • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ Javascript 및 HTML μ†ŒμŠ€ μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œν•œ ν›„ λΈŒλΌμš°μ €λŠ” μ„œλΉ„μŠ€μ— 직접 API μš”μ²­μ„ ν•œλ‹€
    • μ½”λ“œ κ΅ν™˜ 단계λ₯Ό κ±΄λ„ˆλ›°κ³  λŒ€μ‹  μ•‘μ„ΈμŠ€ 토큰이 쿼리 λ¬Έμžμ—΄ 쑰각으둜 ν΄λΌμ΄μ–ΈνŠΈμ— μ¦‰μ‹œ λ°˜ν™˜λ©λ‹ˆλ‹€.
    • 이 μœ ν˜•μ€ back channel 이 μ—†μœΌλ―€λ‘œ refresh token 을 μ‚¬μš©ν•˜μ§€ λͺ»ν•œλ‹€.
    • 토큰 만료 μ‹œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μƒˆλ‘œμš΄ access token을 μ–»μœΌλ €λ©΄ λ‹€μ‹œ OAuth 승인 과정을 거쳐야 ν•œλ‹€
  2. κΆŒν•œ λΆ€μ—¬ 승인 μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • response_type=token (ν•„μˆ˜), id_token
    • client_id (ν•„μˆ˜)
    • redirect_uri (ν•„μˆ˜)
    • scope (선택사항)
    • state (선택사항)

흐름

  • Access Token μš”μ²­ image

image


Resource Owner Password Credentials Grant

κ°œμš”

  1. 흐름 및 νŠΉμ§•
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©μž 이름과 μ•”ν˜Έλ₯Ό μ•‘μ„ΈμŠ€ ν† ν°μœΌλ‘œ κ΅ν™˜ν•  λ•Œ μ‚¬μš©λœλ‹€.
    • 타사 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 이 κΆŒν•œμ„ μ‚¬μš©ν•˜λ„λ‘ ν—ˆμš©ν•΄μ„œλŠ” μ•ˆλ˜κ³  κ³ λ„μ˜ μ‹ λ’°ν•  μžμ‚¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  2. κΆŒν•œ λΆ€μ—¬ 승인 μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • grant_type=password (ν•„μˆ˜)
    • username (ν•„μˆ˜)
    • password (ν•„μˆ˜)
    • client_id (ν•„μˆ˜)
    • client_secret (ν•„μˆ˜)
    • scope (선택사항)

흐름

  • Access Token μš”μ²­ image

image


Client Credentials Grant

κ°œμš”

  1. 흐름 및 νŠΉμ§•
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ¦¬μ†ŒμŠ€ μ†Œμœ μžμΈ λ™μ‹œμ— ν΄λΌμ΄μ–ΈνŠΈμ˜ 역할을 ν•œλ‹€
    • λ¦¬μ†ŒμŠ€ μ†Œμœ μžμ—κ²Œ κΆŒν•œ μœ„μž„ λ°›μ•„ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λŠ” 것이 μ•„λ‹ˆλΌ 자기 μžμ‹ μ΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•  λͺ©μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것
    • μ„œλ²„ λŒ€ μ„œλ²„κ°„μ˜ ν†΅μ‹ μ—μ„œ μ‚¬μš©ν•  수 있으며 IOT 와 같은 μž₯λΉ„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜κ³Όμ˜ 톡신을 μœ„ν•œ μΈμ¦μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.
    • Client Id 와 Client Secret 을 톡해 μ•‘μ„ΈμŠ€ 토큰을 λ°”λ‘œ λ°œκΈ‰ 받을 수 있기 λ•Œλ¬Έμ— Refresh Token 을 μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€
    • Client 정보λ₯Ό 기반으둜 ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μž 정보λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.
  2. κΆŒν•œ λΆ€μ—¬ 승인 μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • grant_type=client_credentials (ν•„μˆ˜)
    • client_id (ν•„μˆ˜)
    • client_secret (ν•„μˆ˜)
    • scope (선택사항)

흐름

  • Access Token μš”μ²­ image

image


Refresh Token Grant

κ°œμš”

  1. 흐름 및 νŠΉμ§•
    • μ•‘μ„ΈμŠ€ 토큰이 λ°œκΈ‰λ  λ•Œ ν•¨κ»˜ μ œκ³΅λ˜λŠ” ν† ν°μœΌλ‘œμ„œ μ•‘μ„ΈμŠ€ 토큰이 λ§Œλ£Œλ˜λ”λΌλ„ ν•¨κ»˜ λ°œκΈ‰λ°›μ•˜λ˜ λ¦¬ν”„λ ˆμ‹œ 토큰이 μœ νš¨ν•˜λ‹€λ©΄, 인증 과정을 μ²˜μŒλΆ€ν„° λ°˜λ³΅ν•˜μ§€ μ•Šμ•„λ„ μ•‘μ„ΈμŠ€ 토큰을 μž¬λ°œκΈ‰ λ°›μœΌμ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • ν•œ 번 μ‚¬μš©λœ λ¦¬ν”„λ ˆμ‹œ 토큰은 νκΈ°λ˜κ±°λ‚˜ μž¬μ‚¬μš© ν•  수 μžˆλ‹€
  2. κΆŒν•œ λΆ€μ—¬ 승인 μš”μ²­ μ‹œ λ§€κ°œλ³€μˆ˜
    • grant_type=refresh_token (ν•„μˆ˜)
    • refresh_token (ν•„μˆ˜)
    • client_id (ν•„μˆ˜)
    • client_secret (ν•„μˆ˜)

흐름

  • Refresh Token μš”μ²­ image

image


PKCE-enhanced Authorization Code Grant

PKCE(Proof Key for Code Exchange, RFC - 6749) κ°œμš”

  • μ½”λ“œ κ΅ν™˜μ„ μœ„ν•œ 증λͺ… ν‚€λ‘œμ„œ CSRF 및 κΆŒν•œλΆ€μ—¬μ½”λ“œ μ‚½μž… 곡격을 λ°©μ§€ν•˜κΈ° μœ„ν•œ Authorization Code Grant Flow 의 ν™•μž₯버전이닀.
  • κΆŒν•œλΆ€μ—¬μ½”λ“œ μš”μ²­μ‹œ Code Verifier와 Code Challenge λ₯Ό μΆ”κ°€ν•˜μ—¬ λ§Œμ•½ Authorization Code Grant Flow μ—μ„œ Authrozization Code κ°€ νƒˆμ·¨λ‹Ήν–ˆμ„ λ•Œ Access Token을 λ°œκΈ‰ν•˜μ§€ λͺ»ν•˜λ„둝 μ°¨λ‹¨ν•œλ‹€.
  • PKCEλŠ” μ›λž˜ λͺ¨λ°”일 μ•±μ—μ„œ Authorization Code Grant Flow λ₯Ό λ³΄ν˜Έν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμœΌλ©° λ‚˜μ€‘μ— 단일 νŽ˜μ΄μ§€ μ•±μ—μ„œλ„ μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯되으며 λͺ¨λ“  μœ ν˜•μ˜ OAuth2 ν΄λΌμ΄μ–ΈνŠΈ, 심지어 ν΄λΌμ΄μ–ΈνŠΈ μ•”ν˜Έλ₯Ό μ‚¬μš©ν•˜λŠ” μ›Ή μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λŠ” 앱에도 μœ μš©ν•˜λ‹€.

μ½”λ“œ 생성

  1. Code Verifier
    β‘  κΆŒν•œλΆ€μ—¬μ½”λ“œ μš”μ²­ 전에 앱이 μ›λž˜ μƒμ„±ν•œ PKCE μš”μ²­μ— λŒ€ν•œ μ½”λ“œ 검증기
    β‘‘ 48 ~ 128 κΈ€μžμˆ˜λ₯Ό κ°€μ§„ λ¬΄μž‘μœ„ λ¬Έμžμ—΄
    β‘’ A-Z a-z 0-9 -._~ 의 ASCII λ¬Έμžλ“€λ‘œλ§Œ ꡬ성됨
  2. Code Challenge
    β‘  μ„ νƒν•œ Hash μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ Code Verifierλ₯Ό Hashing ν•œ ν›„ Base64 인코딩을 ν•œ κ°’
    β‘‘ ex) Base64Encode(Sha256(ASCII(Code Verifier)))
  3. Code Challenge Method
    β‘  plain – Code Verifier κ°€ νŠΉμ •ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •
    β‘‘ S256 – Code Verifier ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©ν•˜λ„λ‘ μ„€μ •

처리 흐름

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” code_verifierλ₯Ό μƒμ„±ν•˜κ³ , code_challenge_methodλ₯Ό μ‚¬μš©ν•˜μ—¬ code_challengeλ₯Ό κ³„μ‚°ν•œλ‹€.
  2. ν΄λΌμ΄μ–ΈνŠΈκ°€ /authorize에 λŒ€ν•œ μš”μ²­μ„ μž‘μ„±ν•œλ‹€.
  3. κΆŒν•œ μ„œλ²„κ°€ /authorize에 λŒ€ν•œ ν‘œμ€€ OAuth2 μš”μ²­ μœ νš¨μ„± 검증을 μˆ˜ν–‰ν•œλ‹€.
  4. κΆŒν•œ μ„œλ²„κ°€ code_challenge 및 code_challenge_method의 쑴재λ₯Ό ν™•μΈν•œλ‹€.
  5. κΆŒν•œ μ„œλ²„κ°€ κΆŒν•œ μ½”λ“œμ— λŒ€ν•΄ code_challenge 및 code_challenge_methodλ₯Ό μ €μž₯ν•œλ‹€.
  6. κΆŒν•œ μ„œλ²„κ°€ κΆŒν•œ μ½”λ“œ 응닡을 λ¦¬ν„΄ν•œλ‹€.
  7. ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€ code_verifierλ₯Ό 포함해 κΆŒν•œ μ½”λ“œλ₯Ό /token에 μ œκ³΅ν•œλ‹€.
  8. κΆŒν•œ μ„œλ²„κ°€ /token에 λŒ€ν•œ ν‘œμ€€ OAuth2 μš”μ²­ μœ νš¨μ„± 검증을 μˆ˜ν–‰ν•œλ‹€.
  9. κΆŒν•œ μ„œλ²„κ°€ 제곡된 code_verifier 및 μ €μž₯된 code_challenge_methodλ₯Ό μ‚¬μš©ν•˜μ—¬ 고유 code_challengeλ₯Ό μƒμ„±ν•œλ‹€.
  10. κΆŒν•œ μ„œλ²„κ°€ μƒμ„±λœ code_challengeλ₯Ό /authorize에 λŒ€ν•œ 초기 μš”μ²­μ— 제곡된 κ°’κ³Ό λΉ„κ΅ν•œλ‹€.
  11. 두 값이 μΌμΉ˜ν•˜λ©΄ μ•‘μ„ΈμŠ€ 토큰이 λ°œν–‰λ˜κ³  μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ μš”μ²­μ΄ κ±°λΆ€λœλ‹€.

code_challenge_method 검증

  1. κΆŒν•œ λΆ€μ—¬ μ½”λ“œ 흐름에 μžˆμ–΄ μΈκ°€μ„œλ²„λŠ” code_verifierλ₯Ό κ²€μ¦ν•˜κΈ° μœ„ν•΄ code_challenge_method 을 이미 μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€
  2. 토큰 κ΅ν™˜μ‹œ code_challenge_method κ°€ plain 이면 μΈκ°€μ„œλ²„λŠ” μ „λ‹¬λœ code_verifier 와 λ³΄κ΄€ν•˜κ³  μžˆλŠ” code_challenge λ¬Έμžμ—΄κ³Ό λ‹¨μˆœνžˆ μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈλ§Œ ν•˜λ©΄λœλ‹€
  3. code_challenge_method κ°€ S256이면 μΈκ°€μ„œλ²„λŠ” μ „λ‹¬λœ code_verifier λ₯Ό κ°€μ Έμ™€μ„œ λ™μΌν•œ S256 ν•΄μ‹œ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€ν™˜ν•œ λ‹€μŒ λ³΄κ΄€λœ code_challenge λ¬Έμžμ—΄κ³Ό λΉ„κ΅ν•΄μ„œ 일치 μ—¬λΆ€λ₯Ό νŒλ‹¨ν•œλ‹€

흐름

  • authorization code μš”μ²­ image
  • Redirect 및 Access Token κ΅ν™˜ μš”μ²­ image

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°