0

我已经从如何使用 jwt 授权的演练中获取了第 2 部分,以便我可以从我的客户端获取访问令牌并授权他们使用 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 创建的授权服务,因此本教程的第一部分不适用于我。

智威汤逊

{
  "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

任何帮助将不胜感激。

谢谢!

4

1 回答 1

0

我认为可以检查以下内容:

首先:

检查您的秘密 base64 代码。“abc123”是真的吗?我正在 jwt.io 网站上查看你的密码,查看你的令牌。但签名无效

第二:

检查您的有效载荷值。你的 jwt 有效载荷是什么。/您的发行人验证集“任何”

什么是“aud”您的 jwt 有效负载。/您的观众验证集'webreport_service'

想想看。

最良好的问候

于 2017-07-12T06:56:44.703 回答