使用 JwtAuthForWebAPI 的 Web APi2 身份验证不接受 JWT 令牌

Posted

技术标签:

【中文标题】使用 JwtAuthForWebAPI 的 Web APi2 身份验证不接受 JWT 令牌【英文标题】:JWT token not accepted by Web APi2 authentication with JwtAuthForWebAPI 【发布时间】:2015-09-27 20:06:58 【问题描述】:

我按照教程进行操作,但 JWT 似乎无法正常工作,但基本身份验证没问题。

我下载并安装了 JwtAuthForWebAPI。我还生成了 JWT 令牌并尝试进行 API 调用,但错误是 HTTP/1.1 401 Unauthorized

我是否必须实施/修改任何东西才能将声明从 JWT 转移到 Thread.CurrentPrincipal 和 HttpContext.CurrentPrincipal?

我的代码很简单: global.asax.cs:

GlobalConfiguration.Configuration.MessageHandlers.Add(
    new JwtAuthenticationMessageHandler
    
        AllowedAudience = reader.AllowedAudience,
        Issuer = reader.Issuer,
        SigningToken = builder.CreateFromKey(reader.SymmetricKey)
    );

Web.config:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <section name="JwtAuthForWebAPI" type="JwtAuthForWebAPI.JwtAuthForWebApiConfigurationSection"/>
  </configSections>

  <JwtAuthForWebAPI
    AllowedAudience="http://www.example.com"
    Issuer="corp"    
    SymmetricKey="cXdlcnR5dWlvcGFzZGZnaGprbHp4Y3Zibm0xMjM0NTY=" 
  />

调用示例

GET http://localhost:34669/api/v1/tasks/8 HTTP/1.1 
Host: localhost:34669 
Authorization: Bearer  eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjb3JwIiwiYXVkIjoiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIsIm5iZiI6MTQwMDU1Mzc1NywiZXhwIjoxNzE2MTcyOTU3LCJ1bmlxdWVfbmFtZSI6ImJob2dnIiwiZ2l2ZW5fbmFtZSI6IkJvc3MiLCJmYW1pbHlfbmFtZSI6IkhvZ2ciLCJyb2xlIjpbIk1hbmFnZXIiLCJKdW5pb3JXb3JrZXIiXX0.Ls73kz80rCaCNqzc3K32BVO9_LnJDL8c1g5AXKIzn8w

【问题讨论】:

【参考方案1】:

哈哈,我发现书的教程有错误:)

在我的示例中存在错误的 JWT 值:) 正确的调用应该如下所示。我不得不手动重新创建 JWT 令牌。

GET http://localhost:34669/api/v1/tasks/8 HTTP/1.1 
Host: localhost:34669
Authorization: Bearer  eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1bmlxdWVfbmFtZSI6ImJob2dnIiwiZ2l2ZW5fbmFtZSI6IkJvc3MiLCJmYW1pbHlfbmFtZSI6IkhvZ2ciLCJyb2xlIjpbIk1hbmFnZXIiLCJTZW5pb3JXb3JrZXIiLCJKdW5pb3JXb3JrZXIiXSwiaXNzIjoiY29ycCIsImF1ZCI6Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iLCJleHAiOjE3NTIwNjgzNjAsIm5iZiI6MTQzNjQ0OTE2MH0.t1lK0ZEA_IZbdiiYeJuuLVeeh1CFSiodzmRPdmezv3c

【讨论】:

以上是关于使用 JwtAuthForWebAPI 的 Web APi2 身份验证不接受 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用 web.py 的 web.database 时应该如何防止滥用?

使用 Web 服务或 Web 服务参考

使用带有 web3 的 npm 链接

什么时候不应该使用 Web 服务?

web框架的本质(使用socket实现的最基础的web框架使用wsgiref实现的web框架)

可以使用 C# 的 Web 前端框架 Blazor