使用JwtBearerAuthenticationOptions时未授权Web API

时间:2017-03-15 17:26:43

标签: asp.net asp.net-web-api owin jwt owin-security

我从第2节开始讨论了如何使用jwt进行授权,以便我可以从客户端获取访问令牌并授权他们使用api。但是,我似乎无法让这个工作。我继续收到Postman发来的401消息:

{
  "Message": "Authorization has been denied for this request."
}

教程链接:http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/

访问令牌来自我用Java创建的授权服务,因此本教程的第一部分不适用于我。

JWT

{
  "exp": 1489641048,
  "user_name": "testuser",
  "authorities": [
    "USER"
  ],
  "jti": "2dde11c3-2f06-496c-9b36-4dbf71cdc2e2",
  "client_id": "webreport_service",
  "scope": [
    "USER"
  ]
}

Web API代码段

 public void ConfigureOAuth(IAppBuilder app)
    {

        var audience = "webreport_service";

        // Api controllers with an [Authorize] attribute will be validated with JWT
        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { audience },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {

                    new SymmetricKeyIssuerSecurityTokenProvider("Any", "abc123")
                }
            });

    }

与第2部分中的链接略有不同,但这是因为我没有base64编码我的秘密,我也没有把发行者放在我的jwt中。

邮差

GET /api/protected HTTP/1.1
Host: localhost:54706
Authenticate: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0ODk2NDEyOTAsInVzZXJfbmFtZSI6InRlc3R1c2VyIiwiYXV0aG9yaXRpZXMiOlsiVVNFUiJdLCJqdGkiOiJlMDNkNWZmZC1hZWI4LTRkODctOGQ3My0zNjhjYjQ2ZDg2OWUiLCJjbGllbnRfaWQiOiJ3ZWJyZXBvcnRfc2VydmljZSIsInNjb3BlIjpbIlVTRVIiXX0.C4hivwA1VF-0GO0xCVUoDIheWQWlAcVWvAzChZTgrHY
Cache-Control: no-cache
Postman-Token: ff628109-d5f4-76e0-41c2-e0c7d377b93f

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为请检查以下内容:

<强>首先

检查您的秘密base64代码。 &#39; ABC123&#39;是真的? 我在你的密码上检查你在jwt.io网站上的令牌。 但签名无效

<强>其次:

检查有效负载值。 什么是&#39; iss&#39;你的jwt有效载荷。 /您的发卡行验证设置&#39;任何&#39;

什么是&#39; aud&#39;你的jwt有效载荷。 /您的受众群体验证了&#39; webreport_service&#39;

想一想。

最好的关注