單點登入(SSO)

Single Sign On 單點登入

Authentication - 認證

用於認可訪問哪些系統,鑑別是否為合法用戶。

Authorization Server/Identity Provider (IDP) - 負責認證的服務。

Resource Server/ Service Provider (SP) - 負責提供資源 (API呼叫) 的服務。

通常兩者皆為同一個服務。

Authorization - 授權

用於規範使用者權限的規則,規定哪些能做、哪些不能。

Token - 訪問依據

Bearer Token

短時間(一般一小時左右),客戶端向 SP 取資源時的方式,

可以放在以下位置:

  • HTTP HeaderRequest 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

Token

基於 Session

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?