问题:我在这里遗漏了什么,或者误解了实际应该调用哪些函数?
所以我开始时通过使用Owin.OAuth创建一个测试WebApi项目来实现OAuth2。点击路线并进入提供商是没有问题的,但这里是代码: 启动类:
public void Configuration(IAppBuilder app)
{
var config = GlobalConfiguration.Configuration;
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new OAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60),
AllowInsecureHttp = true
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
WebApiConfig.Register(config);
}
现在是一个准系统提供者类:
public class OAuthProvider : OAuthAuthorizationServerProvider
{
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
return base.ValidateClientAuthentication(context);
}
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
return base.GrantResourceOwnerCredentials(context);
}
}
我希望使用密码授予https://tools.ietf.org/html/rfc6749#section-4.3.2。现在根据OAuthAuthorizationServerProvider文档,在以下情况下调用GrantResourceOwnerCredentials函数:
当对Token端点的请求以“grant_type”“password”到达时调用。当用户直接向客户端应用程序的用户界面提供名称和密码凭据,并且客户端应用程序使用这些凭据获取“access_token”和可选的“refresh_token”时,就会发生这种情况。
但是当我点击路线时,它总是进入ValidateClientAuthentication函数。
邮差有效载荷:
POST /Token HTTP/1.1
Host: localhost:57507
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
grant_type=password&username=test&password=test123
还尝试通过Postman使用BasicAuth:
POST /Token HTTP/1.1
Host: localhost:57507
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdDp0ZXN0MTIz
grant_type=password
我在这里遗漏了什么,或者误解了它是如何运作的?
答案 0 :(得分:0)
你需要"描述"验证GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)
方法体中凭证的方法,而不是调用基本方法。
当您调用context.Validated(ClaimsIdentity)
方法时 - 您会收到响铃中的持有人令牌。
有一个很好的例子 - see first code block in question
或您可以看到示例here
ValidateClientAuthentication仅验证您的凭据" grant_type = password& username = test& password = test123"
否则,您的代码看起来没问题。
答案 1 :(得分:0)
好吧,所以当我问这个问题时,我错误地解释了呼叫的流程。
我在考虑使用密码授权时要调用的第一个函数是GrantResourceOwnerCredentials
。 OAuth Spec Doc Password Grant.实际上,它始终会调用ValidateClientAuthentication
,然后调用GrantResourceOwnerCredentials
。
所以这只是我的一个误解。此示例代码正在运行。