关于从令牌端点收到的访问令牌的正确用法,我有几个问题。
我应该在哪里存储令牌?理想情况下,我想将它存储在一个cookie中,这样我就可以进行无状态会话,这将有助于我扩展。但是将cookie中的访问令牌保留为安全漏洞吗?
对于客户端发出的每个后续请求,我是否应该每次都反省访问令牌? 每次查看令牌都是一个重要的开销。我看到的另一种方法是创建一个会话,并在维护会话时保持用户的身份验证。但是我认为这很难看,因为:
如果我的理解在我写的要点上是正确的,那么请告诉我。这些问题的正确解决方案是什么。
答案 0 :(得分:1)
问:我应该在哪里存储令牌?
安全的地方。这只能由发出令牌的客户端访问。
当您传输访问令牌时,您必须使用TLS。这是RFC6749 - 10.3. Access Tokens
的强制要求访问令牌凭证必须仅使用TLS传输
问:对于客户端发出的每个后续请求,我是否应该每次都反省访问令牌?
取决于您的申请。如果无法维护会话,则可以使用临时缓存。例如,这可以在端点之前的Java过滤器中实现。如果缓存没有保存访问令牌的有效性详细信息,请附带请求,那么您应该使用内省来验证它。
但请注意缓存。实施在很大程度上取决于您的应此外,您可以面对失效问题。您应该了解访问令牌生存期以使缓存条目无效。
问:如果用户从身份提供商处注销,我不知道会话仍在我的最后维护
Openid conenct定义会话管理规范。它为您提供了从OpenID提供程序中识别最终用户会话信息的选项。但要使用这些,OP应该支持spec实现。检查here
中的规格