PKCE OIDC Flow
PKCE OIDC flow
PKCE → Proof Key for Code Exchange by OAuth Public Client
-
PKCE 是為了要解決假的client 冒充合法的client 取得user token
-
OIDC 可能被攻擊的方式:
偷到client id,client secret和authorization code. 然後冒充 client 打 request 到 authorization server 換到user token

Authorization Code Interception Attack
Notes
-
因為一般的 oidc flow,
authorization code有可能會被攔劫,這樣就有可能可以代替 user 去打給 authorization server 換access token -
所以需要在 client 在(1)就先 generate
code_challenge和state -
在 (2) 時,帶著
state,code_challenge和code_challenge_method到 authorization server. Authorization server 會把code_challenge、code_challenge_method和對應發出去的authorization_code都記下來 -
state是在 (4) 的時候在 client 做verify -
(6)的時候,client 會把在(1)產生的
code_challenge加密後,放在code_verifier當參數帶在 request 上 -
authorization server 在 (6) 把 client 當初帶來的
code_challengehash, 跟這次帶來的code_challenge比對是否相同,就可以確認是否這個request 一樣來自合法的client -
code_verifier是一個generate 出來的 random string.-
在 plain, 也就是沒有加密的情況下
code_challenge = code_verifier. -
而在 S256 的情況下
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
-

Abstract Protocol Flow
Ref:
-
非常清楚的 PKCE RFC7636 文件