參考 Auth 2.0 規格再設計 SSO 機制
此篇非入門說明。將參考OAuth2.0登入規格,將其簡化帶入整合應用。
參考資料
關鍵知識
三個主要 Web API
/SSO/Authorize
負責登入驗證與授權。以 HTTP GET 叫用,這樣才能轉址 redirect to login page。 要注意 Authorize 本身不執行登入,實際執行要轉址到專門的 login page,這樣的好處有二, (一) 可動態選取登入驗證方法:帳號密碼、憑證、PIN 等等。 (二) 可串接其他檢驗,比如:『我不是機器人』。/SSO/Token
以 HTTP POST 叫用。負責發配與刷新 AccessToken, RefreshToken, IdTokne。/SSO/Revoke
以 HTTP POST 叫用。撤銷已發出的 AccessToken。登出後操作步驟之一。
OAuth 2.0 假定執行環境

登入流程
簡化執行環境

簡化指令設計 - 設計圖

簡化後指令簡述
Web API 有二個:
/SSO/Authorize
負責登入驗證與授權。以 HTTP GET 叫用,這樣才能轉址 redirect page。
/SSO/Token
負責發配與刷新 AccessToken, RefreshToken, IdTokne。以 HTTP POST 叫用。
要求授權碼 - 簡化
GET /oauth2/authorize(client_id, state, redirect_uri: http://localhost)
> SUCCESS
GET http://localhost?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
> FAIL
GET http://localhost?
error=access_denied
&error_description=the+user+canceled+the+authentication
§ 使用用戶端密鑰請求存取權杖 - 簡化
※ 將 code 換取 access_token 以使用資源。
POST /oauth2/token(grant_type = 'authorization_code', client_id, auth_code)
§ 刷新存取權杖 - 簡化
POST /oauth2/token(grant_type = 'refresh_token', client_id, refresh_token)
> SUCCESS
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"expires_in": 3599,
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
> ERROR
{
"error": "invalid_scope",
"error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333\r\nCorrelation ID: aaaa0000-bb11-2222-33cc-444444dddddd\r\nTimestamp: 2016-01-09 02:02:12Z",
}
(先這樣)
Last updated