我正在将旧版应用程序(ASP.NET MVC 4应用程序)与OpenID Connect集成在一起。从OIDC提供程序获取id_token和access_token之后,我需要存储它们。通常,必须将它们从客户端“有线”发送到服务器端,因为服务器端必须处理id_token以确定哪个用户发出了请求。我的应用程序未处理access_token。它只是存储在我的应用程序中,直到我需要对需要JWT Bearer身份验证的API发出请求为止。
我看到的是id_token和access_token是从客户端和服务器发送的,不管是头文件还是cookie。如果将id_token和access_token标记为仅HTTP,可以安全地将其存储在cookie中吗?
编辑:
我应该添加有关我的场景的更多信息。
1)我的应用程序始终使用HTTPS,并且所有cookie都被标记为安全。这消除了MITM(中间人)漏洞
2)每个PUT,POST和DELETE请求都使用ASP.NET的防伪令牌类。这样可以防止XSRF。
3)使用ASP.NET库对所有输入进行转义和清理,该库消除了XSS漏洞。
4)将包含id_token的cookie标记为仅http,从而删除了从客户端读取和访问cookie的功能。
最佳答案
您可能不应该将令牌存储在cookie中。理想情况下,访问令牌应存储在客户端的内存中。这样,它们不会随请求一起自动发送到服务器,这就是cookie涉及风险的原因。其他任何地方都可能使您面临潜在的漏洞。
名为“ OAuth 2.0威胁模型和安全注意事项”的RFC 6819规范涉及OAuth令牌周围的风险和漏洞。具体来说,我建议您阅读以下部分:
4.1.3. Threat: Obtaining Access Tokens
4.4.2.2. Threat: Access Token Leak in Browser History
5.1.6. Access Tokens
在我编写的应用程序中,令牌已存储在本地存储和内存中。
建议您通读OAuth 2.0规范,以便您了解使用OAuth 2.0涉及的风险。