博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
API Token 驗證方式設計
阅读量:6877 次
发布时间:2019-06-26

本文共 1511 字,大约阅读时间需要 5 分钟。

後端常見的工作是在對應的產品上出各種 API 提供串接,串接方有可能是 瀏覽器、手機 ,另外在微服務 (MicroService) 興起的同時 Server 與 Server 對接 也是常見的溝通方式。

各服務使用 API 溝通的同時,除非是公開的 API 不需要認證,不然一般的 API 可能都需要經過 認證 或者是 授權 的行為來取得使用的允許權。

原文請看

以下簡介我對於常見的 API Token 串接的設計特性簡介以及優缺分析,提供大家能夠在設計上快速釐清:

  • 自行設計 Token
  • JWT Token
  • OAuth 2.0 驗證

自行設計 Token

  • 適用情境:自家 Server 服務對接,亦即呼叫者都為自家服務或者 Server
  • 優點:
    • 實作簡單
  • 缺點:
    • 必須 Hardcode 設定
    • 更新 Token 的話 Client 和 Server 都要手動更新
  • 備註:
    • 如果提供多組 Client 都可以存取,需要把 Token 分開處理。 當需要把某一組 Token 設定為失效的同時,可以讓其他組的 Token 可以持續生效

JWT Token

  • 適用情境
    • 需要針對個人身份辨識做發放者
    • MicroService Server or Client Side 服務串接
    • 單次認證行為使用 (e.g. Email 驗證)
  • 優點:
    • 根據單一身份或行為進行客製發放
    • 需要夾帶欲使用的(非敏感)資料
    • 設定 Expired time 來降低 Token 流失後作用的風險
  • 缺點:
    • 發出去無法收回,只能等 Token 失效,或者在 Server 端建立黑名單機制做 Block 阻擋
    • 更新 Token 的話 Client 和 Server 都要手動更新
  • 備註:
    • 需注意編碼長度的問題,是否會超出 JS cookie 或者 Local Storage 的儲存長度
    • 與 CSRF 攻擊預防無關,只要 JS 可以 Work,Token 就有機會被竊取而造成攻擊

OAuth 2.0 驗證

  • 優點:

    • 相較於 自設計 Token 對接 以及 JWT Token 對接提供更大管理上的彈性,
    • 可以設定作用域以及存取資料範圍
  • 缺點:

    • 流程繁瑣,嚴謹
  • 備註: 不同種的 Grant 有不同的適用情境,下列簡述:

OAuth Grant 簡介

Authorization Code Grant

  • 適用情境
    • 可保存 client credentials, e.g. client secret, refresh token
    • 不被他人看到的第三方 APP,e.g. Server-side Web APP
  • 各家 OAuth2 provider 幾乎都會實作,e.g. Google, FB, Amazon

Implicit Grant

  • 適用情境:
    • 無法保存 Client Secret 會被他人看到的第三方 APP,e.g. Mobile/Desktop APP, JavaScript Web APP

Client Credentials Grant

  • 適用情境
    • OAuth2 Client 直接向 Authorization Server 取得授權的情境。
    • OAuth2 Client 自己就是 Resource Owner。

Resource Owner Password Credentials Grant

  • 此授權流程需要使用者輸入帳密,所以一般不開放給外部開發者的 OAuth2 Client 使用,避免使用者帳密被第三方紀錄的風險。
  • 適用情境
    • 適用於自家開發的 APP,e.g. Mobile/Desktop APP

转载地址:http://efgfl.baihongyu.com/

你可能感兴趣的文章
安卓开发中个人能力的进阶进程
查看>>
人工智能10年将有颠覆性改变
查看>>
探秘AOP实现原理
查看>>
单点登录(SSO)简介
查看>>
2018最新大数据学习路线分享
查看>>
利用SVG制作不规矩背景的链接导航
查看>>
Linux - 一次运行多个命令
查看>>
10.C# -- 函数参数,参数数组,值传递函数,引用传递函数,输出函数,无参函数...
查看>>
BT5设置ip地址
查看>>
转载/验证码
查看>>
Surface、SurfaceView、SurfaceHolder和SurfaceHolder.Callback之间的联系
查看>>
什么是Data Store and Data Collector?
查看>>
我的友情链接
查看>>
php培训11.30
查看>>
Effective Java读后感
查看>>
windows下两个无线网卡 一个内网 一个外网
查看>>
tcp nat 负载均衡
查看>>
起点,游戏开发的梦想与技能点
查看>>
MPLS 流量工程的配置与各大属性调整详解
查看>>
107个常用Javascript语句
查看>>