我有一个使用OWIN中间件进行JWT身份验证的Asp.net webapi。 我的资源服务器和授权服务器是相同的。我能够从令牌端点获取令牌。成功命中ValidateClientAuthentication和GrantResourceOwnerCredentials方法。 但是,当我尝试访问受保护的(使用[Authorize])api(将授权标头设置为bearer token)时,我只得到“此请求已拒绝授权”。
我已经覆盖了ValidateAuthorizeRequest方法,只是为了看看在通过Postman进行api调用时它是否被命中。然而,它永远不会被击中。
我正在试图找出一种方法来查看是否所有OWIN都在拦截对api的调用而不是对令牌端点的调用。
是否有任何方式或方法可以覆盖,以便我可以调试并查看请求被拒绝的管道中的位置以及原因。
截至目前,我通过Postman拨打电话并获得未经授权的回复。
非常感谢任何帮助。
答案 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/