單點登入(SSO)
Single Sign On 單點登入
Authentication - 認證
用於認可訪問哪些系統,鑑別是否為合法用戶。
Authorization Server/Identity Provider (IDP) - 負責認證的服務。
Resource Server/ Service Provider (SP) - 負責提供資源 (API呼叫) 的服務。
通常兩者皆為同一個服務。
Authorization - 授權
用於規範使用者權限的規則,規定哪些能做、哪些不能。
Token - 訪問依據
Bearer Token
短時間(一般一小時左右),客戶端向 SP 取資源時的方式,
可以放在以下位置:
HTTP Header 或 Request Body,但必須符合以下規範:
Header 要有: Content-Type: application/x-www-form-urlencoded。
Body 格式必須符合同上 Header 規範,必須是 ASCII chars 內容,且只有part。
不可以是GET,必須是一種有使用 Request Body 的 Method。
傳遞時可額外放 realm、scope、error 讓server 驗證是否合法。
Access Token
負責請求資源,短時間,時間愈短、被攻擊的可能性越低。
一但過期,就必須使用 Refresh Token 重新請求。
Refresh Token
負責身份驗證,長時間,主要在 Access Token 過期時作為重新換發所使用。
一但過期,則必須重新認證。
Token 類型
JWT Token
基於 JSON 的開放標準 (RFC-7519),且利於數據結構的傳輸。
確保數據的完整性,缺乏安全性,主要不是為了隱藏或保密資訊。
主要組成
Header
typ:聲明類型。
alg:加密方法 HMAC、SHA、RSA 等等,並進行 base64 編碼。
Payload - 聲明內容,存放訊息的地方。
官方提供幾種:
定義聲明(Claims): Registered、Public、Private。
幾種聲明參數,不強制使用,如: iss、sub、and... etc.。
Signature - 要創建簽名,是由三部分 Header、payload、secret 組成。
Ex :
HMAC SHA256(base64UrlEncode(header) +" . "+ base64UrlEncode(payload).secret) 輸出會是由三個由點組成的base64 URL字符串。 ❗ secret 必須保存在 Server 端,不可外流。

基於 Token 與 Session 登入的不同
基於 Token

基於 Session

參考資料
掘金 - https://juejin.im/post/5b3eac6df265da0f8815e906#heading-21 https://twgreatdaily.com/0kb99GwBJleJMoPMM9wh.html https://mgleon08.github.io/blog/2018/07/16/jwt/ https://blog.yorkxin.org/2013/09/30/oauth2-6-bearer-token.html 軟體品管 - https://www.qa-knowhow.com/?p=4308 https://medium.com/@sherryhsu/session-vs-token-based-authentication-11a6c5ac45e4 https://mp.weixin.qq.com/s/xEIWTduDqQuGL7lfiP735w
Last updated
Was this helpful?