JWT κΈ°λ° μΈμ¦ μλ²μ μ£Όμ νλ‘ν μ½ μ μ λ° μλ¬ μλ΅ μ 리 λ¬Έμμ
λλ€.
λͺ¨λ μμ²/μλ΅ λ³Έλ¬Έμ KISA SEED CBC μνΈν ν Base64λ‘
μ μ‘(CBC_ENC) / μμ μ 볡νΈν(CBC_DEC)ν©λλ€.
- λ‘κ·ΈμΈ (Token λ°κΈ)
- ν ν° κ²μ¦ (Introspect / JWKS)
- μ¬λ°ν μμ² (Reissue)
- λ‘κ·Έμμ / ν ν° νκΈ° (Revoke)
- κ³΅ν΅ μΈμ¦ ν€λ μλ¬
-
POST
/oauth2/token -
Body μμ
CBC_ENC(grant_type=client_credentials[&scope=read]&memid=<νμμμ΄λ>&tmpkey=<μμλ°κΈν€>) -
μ±κ³΅ μλ΅
CBC_DEC({
"access_token": "...",
"token_type": "Bearer",
"expires_in": 599
})- μλ¬
// grant_type λλ½ β 400
{"error":"invalid_client","description":"Missing or invalid parameter: grant_type"}
// μλͺ»λ grant_type β 400
{"error":"unsupported_grant_type","description":"Unsupported grant_type: credentials"}
// memid/tmpkey λλ½ β 400
{"error":"invalid_request","description":"Missing or invalid parameter: {νΉμ ν€}"}
// κ° λΆμΌμΉ/λ§λ£ β 401
{"error":"user_not_allowed","description":"User is not allowed to obtain a token."}-
POST
/oauth2/introspect-
Body:
CBC_ENC(token={access_token}[&token_type_hint=access_token])
-
-
JWKS:
/oauth2/jwks
(μλ² κ²μ¦ μμ / public keyλ‘ μ§μ κ²μ¦ κ°λ₯) -
μ±κ³΅ μλ΅
200 OK
{"active":true,"sub":"textbook","aud":["textbook"],"token_type":"Bearer","client_id":"textbook", ...}- μλ¬
// token λλ½ β 400
{"error":"invalid_request","description":"Missing or invalid parameter: token"}
// λΉνμ±/λ§λ£ ν ν° β 401
{"error":"invalid_token","description":"Token is inactive or expired."}-
POST
/oauth2/token -
Body μμ
CBC_ENC(grant_type=client_credentials[&scope=read]&memid=<νμμμ΄λ>&tmpkey=<μμλ°κΈν€>) -
μ±κ³΅ μλ΅
CBC_DEC({
"access_token": "new key",
"token_type": "Bearer",
"expires_in": 600
})- μλ¬ (λ‘κ·ΈμΈκ³Ό λμΌ κ·μΉ)
{"error":"invalid_client","description":"Missing or invalid parameter: grant_type"}
{"error":"unsupported_grant_type","description":"Unsupported grant_type: credentials"}
{"error":"invalid_request","description":"Missing or invalid parameter: {νΉμ ν€}"}
{"error":"user_not_allowed","description":"User is not allowed to obtain a token."}-
POST
/oauth2/revoke -
Body μμ
CBC_ENC(token={access_token}[&token_type_hint=access_token]) -
μ±κ³΅ μλ΅ 200 OK (ν ν° νκΈ° μ±κ³΅ / InactiveΒ·μ‘΄μ¬νμ§ μλ ν ν°μ΄μ΄λ 200 β RFC 7009 μ€μ)
-
μλ¬
// token λλ½ β 400
{"error":"invalid_request","description":"Missing or invalid parameter: token"}// ν€λ λλ½ β 401
{"error":"invalid_client","description":"Missing or invalid header: Authorization"}
// Basic ν¬λ§· μ€λ₯ β 400
{"error":"invalid_request","description":"Invalid Authorization header format. Missing client_id and/or client_secret."}
// Base64 λμ½λ μ€λ₯ β 400
{"error":"invalid_request","description":"Invalid Authorization header format. Failed to decode credentials."}
// ClientId λΆμΌμΉ β 401
{"error":"invalid_client","description":"Client authentication failed: client_id"}
// ClientSecret λΆμΌμΉ β 401
{"error":"invalid_client","description":"Client authentication failed: client_secret"}