【发布时间】:2015-12-11 17:00:07
【问题描述】:
我正面临 OpenId Connect 的自定义实现。但是(总有一个but)我有些疑惑:
我了解获取acces_token和id_token的过程,除了OP向客户端提供authorization_code的步骤。如果它是通过重定向完成的(使用重定向 uri)
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
- 最终用户能够看到该授权码吗?它不会过期吗?想象一下我们抓住了它,我们稍后(几天后)使用它是一个安全漏洞吗?令牌端点中的状态是否应该过期?
流程继续,我们在客户端获得了Access_token 和id_token。
-
Access_token应该如何在 OP 端使用?它应该存储在数据库中吗?或者自行包含验证所需的信息?您会推荐什么? - 在客户端,每个请求都应该发送两个令牌?
最后一个疑问,如果我们有一个Access_token,那么id_token 的存在是为了在单独的令牌中表示授权和身份验证?
额外疑惑: 我知道获取访问令牌的过程,但我怀疑 OP 一旦生成和发送,它会验证每个请求附带的 access_token
- OP 如何知道访问令牌有效?据我所知,OP 应该说 access_token 是有效/无效的。应该有一些方法来检查它吧?如果令牌没有存储在 DB 中,它如何知道它代表一个有效的经过身份验证的用户?
- 将 access_token 存储在 cookie 中是不是一个坏主意?因为有时我们调用一些 web 服务,我们想发送 access_token 作为参数。还是有其他变通解决方案?
- 访问令牌应如何存储在 Client 中,例如在 ASP.NET 中,在会话中?
非常感谢大家,一旦你给我解释,我会放弃投票并标记为答案。 谢谢!
【问题讨论】:
-
补充的疑惑,也请回答!
标签: oauth oauth-2.0 google-oauth openid openid-connect