无法弄清楚OWIN是否正在拦截来自客户端的api请求

时间:2016-10-15 11:16:51

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

我有一个使用OWIN中间件进行JWT身份验证的Asp.net webapi。 我的资源服务器和授权服务器是相同的。我能够从令牌端点获取令牌。成功命中ValidateClientAuthentication和GrantResourceOwnerCredentials方法。 但是,当我尝试访问受保护的(使用[Authorize])api(将授权标头设置为bearer token)时,我只得到“此请求已拒绝授权”。

我已经覆盖了ValidateAuthorizeRequest方法,只是为了看看在通过Postman进行api调用时它是否被命中。然而,它永远不会被击中。

我正在试图找出一种方法来查看是否所有OWIN都在拦截对api的调用而不是对令牌端点的调用。

是否有任何方式或方法可以覆盖,以便我可以调试并查看请求被拒绝的管道中的位置以及原因。

截至目前,我通过Postman拨打电话并获得未经授权的回复。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果不了解你所做的事情,这很难回答。 我想知道你是否正确连线。您可以在启动类中定义提供程序和令牌格式,然后将应用程序设置为使用这些设置。这是一个例子:

public class Startup

    {    
        public void Configuration(IAppBuilder app)    
        {    
            var config = new HttpConfiguration();    
            config.MapHttpAttributeRoutes();    
            ConfigureOAuth(app);    
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);    
            app.UseWebApi(config);    
        }        

        public void ConfigureOAuth(IAppBuilder app)    
        {    
            int accessTokenExpiresInSeconds = ConfigurationHelper.GetAppSetting("AccessTokenExpirationInSeconds").ToInt();            
            var oAuthServerOptions = new OAuthAuthorizationServerOptions

            {    
                AllowInsecureHttp = true,

                TokenEndpointPath = new PathString(ConfigurationHelper.GetAppSetting("TokenEndPoint")),

                AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(accessTokenExpiresInSeconds),

                Provider = new CustomOAuthProvider(),

                AccessTokenFormat = new CustomJwtFormat(ConfigurationHelper.GetAppSetting("TokenIssuer"))    
            };        

            app.UseOAuthAuthorizationServer(oAuthServerOptions);    
        }    
    }

如果那不是问题,那么你可以在OAuth2和JWT上使用我自己的文章,我已经有了一个关于如何设置所有内容并且代码在GitHub上的完整示例。希望它能引导您朝着正确的方向前进:

https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/