參考:https://aaronparecki.com/oauth-2-simplified/
1、角色定義
應用程序(客戶)
需要獲取用戶的賬號信息,獲得相關權限。
API服務器
資源服務器就是API服務器,用於獲得用戶的信息。
授權服務器
為用戶提供交互界面,確認授權請求。一般來說,和API 服務器是同一台服務器。
用戶
可對外提供部分賬戶信息的人。
2、創建APP
注冊APP信息,一般包括名稱,網站和重定向地址。
任何Http重定向地址都必須是使用TLS安全協議的,意味着地址以https開頭。原生應用的重定向地址可以使用一個自定義的URL方案,例如demoapp://redirect。
3、Authorization Code授權方式
3.1、Web服務器應用
邏輯代碼運行在服務器上。
創建一個登陸的連接:
https://oauth2server.com/auth?response_type=code&
client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=photos&state=1234zyx
code:代表Web服務器希望能獲得一個authorization code。
scope: 一個或多個希望獲取的賬號部分信息。
state: 一個隨機生成的,用於驗證的字符串。
如果用戶同意授權,則返回以下鏈接:
https://oauth2client.com/cb?code=AUTH_CODE_HERE&state=1234zyx
code: 代表返回的authorization code。
state: 返回和請求相同的驗證字符串。
Web服務器通過authorization code獲得訪問令牌。
POST https://api.oauth2server.com/token
grant_type=authorization_code&
code=AUTH_CODE_HERE&
redirect_uri=REDIRECT_URI&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
正常的話,授權服務器會返回令牌和超時時間。
{
"access_token":"RsT5OjbzRn430zqMLgV3Ia",
"expires_in":3600
}
3.2、單頁面應用程序
和WebServer應用過程一致,唯一區別在於最后獲取令牌時,不提供client secret。
3.3、移動應用
創建一個登陸的鏈接,鏈接到授權服務器的原生應用或者授權Web頁面。
3.3.1 、原生應用
重定向地址方案需要在移動操作系統中注冊,綁定到新建的移動應用。
fbauth2://authorize?response_type=code&client_id=CLIENT_ID
&redirect_uri=REDIRECT_URI&scope=email&state=1234zyx
假如授權服務器支持PKCE擴展,還需要提供以下兩個參數。
code_chanllenge
code_chanllenge_method
3.3.2、授權Web頁面
使用移動操作系統的標准瀏覽器。
獲取令牌時,如果用到了PKCE擴展,則必須提供code_verifier,即code_chanllenge的未哈希前的原文。
4、Password授權方式
直接通過用戶名和密碼獲取令牌。一般用於由授權方創建的應用。
POST https://api.oauth2server.com/token
grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
5、Application access授權方式
應用使用自身的注冊信息登錄。
POST https://api.oauth2server.com/token
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET