使用JWT拒绝此请求的授权

时间:2016-10-13 11:04:23

标签: asp.net-web-api asp.net-web-api2 owin jwt katana

我正在尝试使用OWIN中间件为我的ASP.NET WebAPI 2.0实现JWT身份验证。

我完成了从OAuthAuthorizationServer获取jwt令牌的第一项任务。资源所有者和令牌服务器是相同的,即相同的WebAPI生成令牌,并且也应该使用它来提供对资源的访问。

在我的Global.asax文件中,我添加了以下代码行

GlobalConfiguration.Configure(FilterConfig.Configure);

在我的Filter.config中,我添加了以下配置方法,我将其传递给Global.asax文件中的GlobalConfiguration.Configure方法。

public static void Configure(HttpConfiguration config)
{
    config.Filters.Add(new System.Web.Http.AuthorizeAttribute());
}

添加此功能显然可以保护所有api免受未经授权的访问。

当我通过传递给Authorization标头的Bearer令牌点击任何api时,我只会收到“此请求的授权被拒绝”的消息。

现在令我困惑的是,当我在我的OWIN启动文件中添加以下代码时会发生这种情况

var config = new HttpConfiguration();
WebApiConfig.Register(config);

app.UseWebApi(config);

只要在启动文件中添加上述代码,授权就会以某种方式被删除。而且我可以击中之前无法访问的api。无论我是否通过不必要的承载令牌,都可以访问它。

你们能指出我正确的方向吗?如果它的行为如此,那么这表明了什么?

更新

        public void ConfigureAuth(IAppBuilder app)
        {

            var issuer = ConfigurationManager.AppSettings["issuer"];
            var secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["secret"]);



            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                // In production mode set AllowInsecureHttp = false
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/Token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
                Provider = new CustomOAuthProvider(),
                AccessTokenFormat = new CustomJwtFormat(issuer)
            };


            app.UseOAuthAuthorizationServer(OAuthOptions);

            // Enable bearer authentication with jwt
            app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { "Any" },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {
                    new SymmetricKeyIssuerSecurityTokenProvider(issuer,secret)
                }
            });

            var hh = ConfigureWebApi();
            app.UseWebApi(hh);
       }


        private HttpConfiguration ConfigureWebApi()
        {
            var config = new HttpConfiguration();
            var cors = new EnableCorsAttribute("http://localhost:50374", "*", "*");
            config.EnableCors(cors);
            config.Routes.MapHttpRoute(
                "DefaultApi",
                "api/{controller}/{action}/{id}",
                new { id = RouteParameter.Optional });
            config.Filters.Add(new System.Web.Http.AuthorizeAttribute());
            return config;
        }

0 个答案:

没有答案