我创建了一个OAUTH2授权服务器,它使用客户端凭证进行身份验证,并负责发布JWT令牌。当我使用邮递员发出请求时,我按预期得到了JWT令牌,但是当我以角度放置请求时,收到错误消息:“unsupported_grant_type”。如何在角度http请求中实现client_credentials授予类型?
下面是授权服务器相关的代码:
Startup.cs
public void Configuration(IAppBuilder app)
{
// HTTP Configuration
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
ConfigureOAuth(app);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
private void ConfigureOAuth(IAppBuilder app)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new CustomOAuthProvider(ActiveKernel),
AccessTokenFormat = new CustomJwtFormat("http://localhost:62790", ActiveKernel)
};
// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
}
CustomOAuthProvider.cs
当我把使用授权类型的OAuth2到http://localhost:55555/oauth2/Token的请求在邮差中,我返回了一个有效的JWT令牌,我可以将其添加到我的请求中:
但是,当我尝试使用角度获取访问令牌时,我收到一条错误消息,指示:“unsupported_grant_type”。我期望的grant_type是client_credentials。我已经尝试了多种角度的方法来使这个工作没有运气。这里是角当前请求:
function getLoginToken() {
var auth = btoa("89C30F1E-DEE3-4C67-8P2E-9C974R5A35EA:B9wXE8Vo+FEkm2AnqFZlS+KJiwYc+bSnarpq90lGyBo=");
var loginToken = $http({
url: 'http://localhost:55555/oauth2/Token',
method: "POST",
data: {
grant_type: 'client_credentials'
},
withCredentials: true,
headers: {
"Authorization": "Basic " + auth,
'Content-Type': 'application/x-www-form-urlencoded'
}
}).then(function(data) {
return data;
}).catch(function (errorResponse) {
throw errorResponse;
});
return loginToken;
};
我已经尝试添加“的Content-Type”:“应用程序/ X WWW的形式,进行了urlencoded”的头和加入grant_type到URL,但结果是一样的。如果我使用邮递员放置请求而不使用授权功能;但是使用Body'x-www-form-urlencoded',我会收到与角度相同的错误消息。
在angular和second postman的例子中,我实际上都在ValidateClientAuthentication方法的内部获取了正确的client_id和client_secret,并且验证了上下文。
这里有两个请求的提琴手图片:
从角什么可这里怎么回事不对任何建议我可能能够解决这个问题?
在此先感谢!