Oauth中用户通过app提供用户名密码向授权服务器认证, 通过后, 授权服务器颁发1小时有效的access token和30天有效的refresh token, 然后app用access token访问资源服务器, access token过期前再去授权服务器请求新的access token和refresh token, 直到refresh token也过期, 需要用户再次输入用户名密码. refresh token可以存储在app中或者app的服务器中(看哪个更安全).
access token一般通过jwt的方式发送给资源服务器做验证. 资源服务器如果相对授权服务器是第三方的, 那么要去授权服务器的JWKS 端点如https://授权服务器域名/.well-known/jwks.json取得公钥, 用来验证jwt, 验证通过后再返回资源.
我猜想Oauth这么设计的原理, 是最不可信的渠道存储和发送最短期的密钥, 按不可信到可信, 依次是:

  • 网络传输, 尽量只传输access token(多数时间使用), 少数时间传输 refresh token(一小时传输一次), 几乎不传输用户名密码(3个月一次)
  • 资源服务器, 只传输access token和验证公钥
  • APP / APP 服务器, 存储access token/ refresh token
  • 用户的大脑/用户的操作系统/授权服务器可以加密存储用户名密码, 授权服务器存储用于验证的公钥私钥

标签: none 阅读量: 56

添加新评论