最後一週就讓我們仔細看一下 OAuth grant 以及 OIDC flow 當中各種 request & response 的結構吧
08 - OAuth (2) Authorization code grant
由 Client
將使用者導向 Authorization server
,其 url params 如下
GET /authorize?response_type=code
&client_id=xxx
&state=xxx
&scope=xxx
&redirect_uri=xxx
&resource=xxx
&code_challenge=xxx
&code_challenge_method=xxx
response_type
: 這裡的值為 "code",代表我們採用 OAuth authorization code grantclient_id
: 在 Authorization server
所登記的 Client
的 IDstate
: 當中包含了 Client
當前的狀態資訊,之後會用來比對 Authorization server
response 當中的 state 以確保前後一致scope
: 代表這個請求所想要取得授權的內容,譬如 get:dataredirect_uri
: 在 step 5 Authorization server
將使用者導回到 Client
時的 urlresource
: 在 Authorization server
所登記的 Resource server
的 IDcode_challenge
: PKCE 流程當中的 code challengecode_challenge_method
: PKCE 流程當中的 code challenge method在使用者輸入帳號密碼,驗證身份完畢之後 (step 3 & 4),Authorization server
的回應如下
https://client_redirect_uri/callback?code=xxx&state=xxx
code
: authorization codestate
: 跟上面 request 當中的 state 一樣拿到 authorization code 的 Client
,就可以向 Authorization server
發出 POST 請求
POST /token
grant_type=xxx
client_id=xxx
code_verifier=xxx
redirect_uri=xxx
grant_type
: 這裡會使用 "authorization_code" 代表採用 OAuth authorization code grantcode
: 先前 Client
收到的 authorization codeclient_id
: 在 Authorization server
所登記的 Client
的 IDcode_verifier
: PKCE 當中的 code verifier,用來確保當初送出請求和現在送出請求的 Client
是同一個redirect_uri
: 同先前的 redirect uri收到 Client
發出的 POST 請求,Authorization server
透過 code 以及 PKCE 確認 Client
身份之後,就可以發出 response,當中所攜帶的 payload 如下
{
access_token: xxx,
token_type: xxx,
expired_in: xxx,
refresh_token: xxx
}
access_token
: Client
可以用來向 Resource server
發送請求token_type
: token 的類型,譬如 "Bearer"expired_in
: token 的續存時間refresh_token
: 在 access_token
到期之後,Client
可以拿 refresh_token
向 Authorization server
取得新的 access_token