【问题标题】:How do I request a refresh token using OIDC如何使用 OIDC 请求刷新令牌
【发布时间】:2020-06-02 22:10:45
【问题描述】:
我正在尝试使用 OIDC 和 OAuth2 实现刷新令牌,但无法理解工作流程。据我所知,使用授权代码流,在来自/token 端点的响应中获取刷新令牌的是offline_access 范围在/authorize 请求中的存在。
我的问题是,如果 offline_access 范围仅发送到 /authorize 端点,或者该范围是否也存在,那么对令牌端点的请求如何知道它应该为该用户登录返回一个刷新令牌在令牌请求中?或者这是应该在/authorize 工作流期间生成和存储刷新令牌的情况,然后返回代码,然后在/token 工作流中查找以返回那里?
具体遵循此工作流程:
【问题讨论】:
标签:
authentication
oauth-2.0
openid-connect
refresh-token
【解决方案1】:
在授权请求期间发送范围,从授权服务器的角度来看,将执行以下操作:
- 代码返回给调用者
- 代码被缓存,存活时间很短(例如 1 分钟)
- 作用域被缓存
- 在某些流程中,其他详细信息(例如 PKCE 验证程序)也会被缓存
接下来,客户端发出授权代码授予请求以将代码交换为令牌,授权服务器执行以下操作:
- 查找代码
- 应用 PKCE 验证检查
- 检查重定向 URI 是否与原始请求匹配
- 查找缓存范围
- 从 OAuth 客户端配置中查找详细信息,例如刷新令牌生命周期
- 根据上述数据生成令牌
- 删除缓存条目,使相同的代码无法再次处理
- 将令牌返回给调用者
如上所述,作为应用程序开发人员了解 AS 行为的关键点很有用,尽管我希望我遗漏了一两点。我的主要关注点倾向于在我的 UI 和 API 中集成流。
当然,对于授权服务器,我们应该始终使用经过认证的 3rd 方实施,例如低成本云或免费开源解决方案。