【问题标题】:ASP.NET core JWT Token Validation fails on same originASP.NET 核心 JWT 令牌验证在同一来源上失败
【发布时间】:2020-02-16 10:16:34
【问题描述】:

我正在使用 Angular Web 客户端编写一个 ASP.NET 核心 (2.2) 应用程序。对于身份验证,我使用 JWT 令牌验证:“登录”端点发出 JWT 令牌,然后在 Authorization: Bearer xxxxx 标头中显示。

当 ASP.NET 应用程序和 Web 客户端独立运行时,即当我在 Visual Studio 中启动 ASP.NET 应用程序并在不同端口上使用 ng serve 运行 Web 客户端时,一切正常。

当我将编译器 Web 客户端复制到 wwwroot 目录时,JWT 令牌验证失败。

登录调用仍然成功并返回一个 JWT 令牌。但是在Authorization 标头中使用令牌的下一次调用失败。日志只给出:

承载未通过身份验证。失败信息:否 可用于令牌的 SecurityTokenValidator:eyJhbGciOiJIUzI.....

服务器代码在这两种情况下都是相同的,唯一的变化是客户端的index.html 中的“<base>”标记(因为它是从 asp.net 应用程序的“webapp”子路径提供的)

据我监控网络请求可以看出,标头和令牌已正确发送。唯一的区别是,当客户端从不同的端口运行时,浏览器会发出额外的“OPTIONS”请求(我假设是由于 CORS,但这部分运行良好,Cors 已启用)。

JWT 签名秘密、受众、颁发者等在两种情况下均已设置且相同。

是否有任何其他的 JWT 令牌验证机制可以解释这种行为?

【问题讨论】:

  • 你能分享一些代码吗?我面临着完全相同的问题

标签: asp.net-core jwt asp.net-core-2.2


【解决方案1】:

我遇到了同样的问题,发现它与令牌添加到标头的方式有关:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

我注意到以这种方式标记包含 " (双引号),因此被拒绝。 我这样做了:

client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Replace("\"", "")}");

并且工作,但不是最干净的解决方案:(。 希望对你有帮助

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 2019-10-20
    • 2019-06-14
    • 2017-06-22
    • 2020-08-22
    • 2023-03-19
    • 2019-08-04
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多