我试图为使用OAuth的Web API设置swagger文档(使用OWIN中间件的UseOAuthAuthorizationServer ')但遇到问题。使用Swagger(Swashbuckle和Swashbuckle.Core版本为5.3.2)时,clientId为null使用Web Api(v5.2.3)
我做的OAuth招摇配置如下:
一般的OAuth配置与范围:
c.OAuth2("oauth2")
.Description("OAuth2 Implicit Grant")
.Flow("implicit")
.AuthorizationUrl(ConfigurationManager.AppSettings[Constants.AuthorizationHostUrl])
.TokenUrl(ConfigurationManager.AppSettings[Constants.TokenUrl])
.Scopes(scopes =>
{
scopes.Add("Admin", "Admin permission required");
});
启用OAuth使用所选的API:
c.OperationFilter<AssignOAuth2SecurityRequirements>();
扬鞭UI配置:
c.EnableOAuth2Support("MyPortal", "test-realm", "Swagger UI");
使用上面的代码,我可以查看适当的终点方法的切换按钮。当我点击按钮时,它也会根据上述配置显示范围。
有一次,我选择作用域并点击授权按钮,我的OAuth服务器无法进行身份验证,因为它首先验证了客户端,看起来很大兴趣不在传递客户端ID值。问题在我的OAuth服务器即检测到,
OAuthAuthorizationServerProvider::ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
方法失败在低于行:
if (!context.TryGetBasicCredentials(out suppliedClientId, out suppliedClientSecret))
{
//if resource provider taking client credentials with FORMS authentication
context.TryGetFormCredentials(out suppliedClientId, out suppliedClientSecret);
}
if (context.ClientId == null)
{
context.SetError("invalid_clientId", "client_Id is not set");
return;
}
OAuthValidateClientAuthenticationContext参数没有关于客户机的信息。
在调试时,在上述方法中,我已经逃过了这些故障点并成功验证了客户端。
但尽管如此,我得到了下面的错误,对此我没有任何线索:
unsupported_grant_type
有人可以帮我如何解决这些问题?
感谢您的回复。我遵循这篇文章[链接](http://www.wmpratt.com/part-ii-swagger-and-asp-net-web-api-enabling-oauth2/),并根据该文章,我已将范围设置为我的角色名称。在你回复之后,我已经将字典值硬编码到我的客户端-id(仅用于测试目的),但仍然将客户端ID设置为空。 –