前言
在 OAuth 2.0 - Authorization Code Flow 了解它是先取回授權碼後再透過該授權碼,Client Id及Client Secret,再取回Access Token,透過它去存取 API。
Client Secret相當於是 Password,如果是 Public Client(SPA, Native applications),那就會讓別人知道Client Secret,
所以可以使用OAuth 2.0 - Implicit Flow
以下使用OAuth 2.0 Playground來演示。
OAuth 2.0 - Implicit Flow
開始之前需要註冊 Client
1.組出跟 Authorization Server 取回 Code 的 URL(authorize),
response_type的值為token(表示我們直接取回Access Token),client_id, redirect_uri為 Client 註冊的資訊,
state為防止 XSRF 準備的值,當 Authorization Server 回 Call 時,也會把接收到的 state 回傳回來,
scope 則為要求的 Resources,這裡給的值為 photo
1 | https://authorization-server.com/authorize? |
2.轉址到上述建立的 URL(Authorization Server 的 Authorization endpoint),在 Authorization Server系統中,輸入使用者帳號及密碼
3.顯示同意 Client 存取要求的 scope 權限(consent 畫面可以設定顯示與否)。
4.當使用者同意後,Authorization Server 會把產生的 access_token 及剛才傳過去的 state 一併傳回來給 redirect_uri 的網址(implicit.html)去驗證 state 值是否正確。
註:參數透過 # ,所以 response_mode=fragment
5.解析 URL 取回 access_token,呼叫 API 時,加入 access_token 就可以了
1 | HttpClient client = new HttpClient(); |
適用情境
因為在取得 AccessToken 時,不會傳遞 client_secret ,所以適用於 public client,例如 SPA, Native applications,
建議使用 OAuth 2.0 - Authorization Code Flow With PKCE 來代替
- 註: OAuth 2.1 就沒有 Implicit Flow