使用令牌持有者而不是 cookie 实现身份验证



如何在没有cookie的情况下实现身份验证(和授权(,并且在MVC Core中 ASP.Net 所有页面只有持有者令牌?

我们还能使用 ASP.Net 身份吗?

不可以,不能将持有者令牌与 MVC 视图一起使用。仅使用 WebAPI 式调用(由 JavaScript/Ajax 调用调用(,因为对于持有者令牌,您需要在 HTTP 请求中传递包含持有者令牌的标头。

此外,ASP.NET 核心MVC和 ASP.NET 核心身份都没有提供生成JWT或不透明/刷新令牌的机制。您需要一个第三方库(ASOS,OpenIddict或IdentityServer4 - 或编写自己的中间件(。

一般方法是将 Cookie 用于 MVC (+防伪令牌

- 这些对于防止跨站点伪造请求 (XSRF( 攻击很重要(和 WebAPI 的持有者(使用 Cookie 运行 Ajax/Rest 调用存在安全问题,因为您无法像使用防伪令牌执行 MVC 那样轻松保护(。有疑问,谷歌关于条款;)

这对你有意义吗?

  1. 您可以将 JWT 存储在无 cookie 会话中 - 请参阅 Asp.net mvc 4 - 需要使用会话但不能使用 cookie

不过,这违背了拥有JWT的目的。

  1. 您可以确保 JWT 是每个链接中的 URL 参数,然后覆盖Application_AuthenticateRequest以在 URL 中找到它并手动将标识分配给上下文。 见答案 如何在 MVC 应用程序中使用 JWT 进行身份验证和授权?

拥有多个带有大量 JWT 令牌数据的链接将加起来。此外,如果在链接链中遗漏了一个,那么 JWT 将被"丢弃"。可以将 JWT 保存在客户端会话存储中,并让 javascript 在单击链接时动态地将 JWT 添加到链接中。

最新更新