如何使用PKCE授权流程注销?

时间:2020-06-25 21:52:46

标签: authentication oauth oauth-2.0 okta

如果我有一个app和一个api。如果app通过授权服务器登录并随每个请求发送authorization: Bearer xxx标头,则api可以在本地验证令牌。 当用户(通过身份验证服务器)注销但token尚未过期时(如果有人检索到此token,他们将能够发出请求(如果令牌的身份验证是在本地完成的)服务器),对吗?如果是这样,为什么这样的注销流程被认为是安全的?

编辑:澄清主要问题:如果用户注销其访问令牌仍然有效(为什么我们进行本地令牌验证),为什么PKCE流程被认为是安全的

3 个答案:

答案 0 :(得分:1)

行为概述

与较旧的独立网络应用程序相比,使用OAuth可以将关注点分离的程度更大:

  • 您登录UI
  • 这已被外部化到授权服务器
  • 颁发访问令牌的期限是固定的/较短的
  • 访问令牌用作API消息凭据
  • 访问令牌可能会发送到其他组件并从那里使用

注销时:

  • 您从应用程序中删除令牌
  • 您重定向以告诉授权服务器该用户不再登录到任何UI
  • 这不会使访问令牌无效

令牌存储

令牌应存储在专用存储器或受保护的存储器中,以使攻击者无法轻松访问它们。然后,您的应用会在注销过程中删除令牌,以使攻击者无法再使用令牌。

威胁

OAuth Threat Model的一节中有一个关于被盗令牌的部分,在该部分中,我们建议使用以上存储空间并使令牌短暂存在。行业最常见的访问令牌默认值为60分钟。

恶意方窃取令牌的主要风险是通过跨站点脚本编写。 XSS风险与注销无关。应该定期进行安全测试,以确保减轻XSS风险。

安全与性能之间的平衡

UI可能会告诉授权服务器吊销了令牌。但是,API然后需要在每个API请求上调用授权服务器以检查令牌吊销。这会导致性能不佳。

API体系结构

我一直希望在OAuth安全的API中使用Claims Caching和自省功能,因为它可以提供对实际API的最佳控制以及良好的可扩展性和性能。

有了这个功能,如果您真的想使注销后的访问令牌不可用,而又不影响性能,那么您的UI可以在注销过程中执行以下操作:

  • 在授权服务器上撤消访问令牌(如果支持)
  • 调用API要求其删除访问令牌的缓存声明

答案 1 :(得分:0)

Okta / introspect可以告诉您active是否为true或false,如果您不对API https://developer.okta.com/docs/reference/api/oidc/#introspect进行抨击,则可以针对每个请求进行检查

答案 2 :(得分:0)

很难访问令牌,这可能是一个很好的理由,说明它并不是每个定义都不安全。

但是,提供注销选项是一个好主意。 OAuth2具有“吊销”功能,以确保吊销令牌:

https://tools.ietf.org/html/rfc7009

并非每个服务器都支持此功能。