WebApi呼叫总是未经授权

时间:2017-10-13 17:09:29

标签: asp.net authentication asp.net-web-api jwt

我正在我的Asp .Net WebApi上实现访问令牌验证,但是虽然我试图禁用任何类型的检查,但我总是得到401 Unauthorized。 我只添加了后面的代码和控制器中的Authorize属性:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        TokenValidationParameters validationParameters =
            new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateIssuerSigningKey = false,
                RequireSignedTokens = false,
                RequireExpirationTime = false,
                ValidateAudience = false,
                ValidateLifetime = false,
                ValidateActor = false
            };

        app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions()
        {
            TokenValidationParameters = validationParameters
        });
    }
}

此外,这是Global.asax

{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

我确信我使用的令牌有效,因为如果我使用ADFS验证代替此手动验证,则流程可以正常工作。

更新 启用调试信息我注意到我收到以下错误。

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware错误:0:身份验证失败 System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10500:签名验证失败。无法解析SecurityKeyIdentifier:'SecurityKeyIdentifier     (     IsReadOnly = False,     计数= 1,     条款[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x84371F65121DD3A5362C77EF61C5CC4EE5AD3807)     )

1 个答案:

答案 0 :(得分:2)

首先我在Owin上添加了诊断

  <system.diagnostics>
<switches>
  <add name="Microsoft.Owin" value="Verbose" />
</switches>

然后我在IssuerSigningToken中添加了TokenValidationParameters,因为中间件试图验证令牌。 由于这个答案https://stackoverflow.com/a/35835672/2297037,我找到了这个解决方案。