SaveTokens = 真正愚蠢的 OpenIdConnect 中间件?
SaveTokens = true stupid in OpenIdConnect Middleware?
在使用混合或授权代码流获取访问令牌以使它们远离浏览器之后,在 (ASP.NET 核心) OpenIdConnect 中间件中使用 SaveTokens = true 似乎很愚蠢,这样它们最终就会出现在浏览器中再次。
使用中间件存储访问令牌的更好方法是什么?
使用 SaveTokens
中间件将令牌与用户声明一起存储在 cookie 中。虽然此 cookie 可能存储在浏览器中,但它受到保护,因此只有该应用程序可以读取它。浏览器或客户端代码无法读取 cookie。所以他们并没有真正在浏览器中结束(就像他们使用隐式授权类型一样)。
否则,您需要做的是创建令牌存储,通过经过身份验证的用户或会话查找令牌。
ASP.NET Core Identity 有一个 table 用于为您可以考虑使用的用户存储令牌,但这意味着您的所有应用程序都必须与 ASP.NET 集成任何应用程序都可以访问身份库和令牌。
与隐式流相比有几个关键差异,这使得它更加安全:
它们最终在浏览器中作为 Secure
and HttpOnly
cookie,这意味着它们是:
- 仅通过 HTTPS 发送加密请求。
- JavaScript无法访问它们。
cookie 也被加密,只能由 ASP.NET 核心服务器应用程序读取。因此,即使攻击者确实以某种方式获得了它们,要解密它们,他们也需要访问服务器或 ASP.NET Core 的数据保护提供商使用的加密密钥。
在使用混合或授权代码流获取访问令牌以使它们远离浏览器之后,在 (ASP.NET 核心) OpenIdConnect 中间件中使用 SaveTokens = true 似乎很愚蠢,这样它们最终就会出现在浏览器中再次。
使用中间件存储访问令牌的更好方法是什么?
使用 SaveTokens
中间件将令牌与用户声明一起存储在 cookie 中。虽然此 cookie 可能存储在浏览器中,但它受到保护,因此只有该应用程序可以读取它。浏览器或客户端代码无法读取 cookie。所以他们并没有真正在浏览器中结束(就像他们使用隐式授权类型一样)。
否则,您需要做的是创建令牌存储,通过经过身份验证的用户或会话查找令牌。
ASP.NET Core Identity 有一个 table 用于为您可以考虑使用的用户存储令牌,但这意味着您的所有应用程序都必须与 ASP.NET 集成任何应用程序都可以访问身份库和令牌。
与隐式流相比有几个关键差异,这使得它更加安全:
它们最终在浏览器中作为
Secure
andHttpOnly
cookie,这意味着它们是:- 仅通过 HTTPS 发送加密请求。
- JavaScript无法访问它们。
cookie 也被加密,只能由 ASP.NET 核心服务器应用程序读取。因此,即使攻击者确实以某种方式获得了它们,要解密它们,他们也需要访问服务器或 ASP.NET Core 的数据保护提供商使用的加密密钥。