我的iOS移动应用程序使用OAuth2.0协议实现的服务.OAuth访问令牌附带刷新令牌和expires_in
字段.我在我的应用程序中保存了刷新令牌和访问令牌到期时间,但不知道何时使用它们.
expires_in
什么?Gro*_*ify 65
以下是有关OAuth 2.0令牌刷新的信息.
在定义中过期
OAuth 2.0标准RFC 6749将expires_in
字段定义为到期秒数:
expires_in:推荐.访问令牌的生命周期(以秒为单位).例如,值"3600"表示访问令牌将在生成响应之后的一小时内到期.如果省略,授权服务器应该通过其他方式提供到期时间或记录默认值.
令牌刷新处理:方法1
在接收到一个有效的access_token
,expires_in
值,refresh_token
等等,客户端可以通过存储的到期时间,并检查它在每次请求处理此.这可以使用以下步骤完成:
expires_in
为过期时间(epoch,RFC-3339/ISO-8601 datetime等)access_token
已过期)示例实现是Go oauth2
库,它将expires_in
值转换为Token expiry
属性中的RFC 3339日期时间.expiry
不是由OAuth 2.0标准定义,但在此处很有用.
在检查时间时,请确保您是同一时间,例如,通过将所有时间转换为纪元或UTC时区来使用相同的时区.
除了接收新内容之外access_token
,您可能会refresh_token
在将来收到新的过期时间.如果您收到此消息,则应存储新内容refresh_token
以延长会话的使用期限.
令牌刷新处理:方法2
处理令牌刷新的另一种方法是在收到无效令牌错误后手动刷新.这可以通过先前的方法或单独完成.
如果您尝试使用过期access_token
并且获得无效的令牌错误,则应执行令牌刷新(如果刷新令牌仍然有效).由于不同的服务可以对过期的令牌使用不同的错误代码,您可以跟踪每个服务的代码,或者跨服务刷新令牌的简单方法是在遇到4xx错误时简单地尝试单次刷新.
无效的访问令牌错误
以下是热门服务的一些错误代码:
刷新令牌过期
如果您refresh_token
已过期,则需要再次完成授权过程.
该的OAuth 2.0规范没有定义刷新令牌到期或如何处理它,但是,许多API将返回一个refresh_token_expires_in
属性当刷新令牌不会过期.不同的API将以不同的方式处理刷新令牌过期,因此查看每个API的文档非常重要,但通常在刷新访问令牌时可能会收到新的刷新令牌.应以类似的方式处理到期,例如转换refresh_token_expires_in
为RFC 3339日期时间refresh_token_expiry
值.
一些例子包括LinkedIn,eBay和RingCentral.在LinkedIn API中,当您刷新访问令牌时,您将收到一个刷新令牌,其具有refresh_token_expires_in
针对原始刷新令牌到期时间的递减属性,直到您需要再次进行身份验证.RingCentral API将返回具有静态时间的刷新令牌,因此如果令牌刷新并且刷新令牌更新一致地完成,则用户不必再次进行身份验证.
Gar*_*her 12
建议使用上面的方法 2,因为 401 可能因多种原因而发生,例如更新令牌签名证书或时钟差异:
我已经实现了大量成功的 OAuth 客户端,并且一直使用这种技术 - 并且避免阅读客户端代码中的 expires_in 字段
归档时间: |
|
查看次数: |
42930 次 |
最近记录: |