Owin OAuth 2.0密码授权流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Owin OAuth 2.0密码授权流程相关的知识,希望对你有一定的参考价值。
问题:我在这里遗漏了什么或者误解了实际应该调用哪些函数?
所以我通过创建一个使用Owin.OAuth实现OAuth2的测试Web Api项目开始简单。点击路由并进入提供程序是没有问题的,但这里是代码:启动类:
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
我在这里遗漏了什么或者误解了它是如何工作的吗?
您需要“描述”在GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)
方法体中验证凭据的方法,而不是调用base方法。当你调用context.Validated(ClaimsIdentity)
方法时 - 你会得到响应的持有者令牌。
有一个很好的例子 - see first code block in question
或者您可以看到示例here
ValidateClientAuthentication仅验证您的凭据“grant_type = password&username = test&password = test123”
否则,您的代码看起来没问题。
好吧,所以当我问这个问题时,我正在正确地解释呼叫的流程。
我在想,当使用密码授权时,要调用的第一个函数是GrantResourceOwnerCredentials
。 OAuth Spec Doc Password Grant.实际上它总是打电话给ValidateClientAuthentication
然后GrantResourceOwnerCredentials
。
所以这只是我的一个误解。此示例代码正在运行。
以上是关于Owin OAuth 2.0密码授权流程的主要内容,如果未能解决你的问题,请参考以下文章
spring-security-oauth2.0 SSO大体流程图
OAuth 2.0:在授权代码流程中,谁最终将访问令牌交给我的 Web 浏览器?