问:我是不是漏掉了什么东西,还是误解了应该叫什么功能?
因此,我通过创建一个使用WebApi实现OAuth2的测试Owin.OAuth项目,开始了简单的工作。按下路由并进入提供者是没有问题的,但是下面是代码:启动类:
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://www.rfc-editor.org/rfc/rfc6749#section-4.3.2。现在,根据OAuthAuthorizationServerProvider文档,在以下情况下调用GrantResourceOwnerCredentials函数:
当对令牌端点的请求以"grant_type“的”密码“到达时调用。当用户将名称和密码凭据直接提供到客户端应用程序的用户界面,而客户端应用程序使用这些凭据获取"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还尝试通过邮递员使用BasicAuth:
POST /Token HTTP/1.1
Host: localhost:57507
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdDp0ZXN0MTIz
grant_type=password我是不是漏掉了什么还是曲解了它的工作原理?
发布于 2017-12-29 21:15:36
好的,当我问这个问题时,我不正确地解释了调用的流程。
我在想,当使用密码授予时,第一个被调用的函数将是GrantResourceOwnerCredentials。实际上,OAuth指定的医生密码授予。总是调用ValidateClientAuthentication,然后调用GrantResourceOwnerCredentials。
所以这只是我的一个误会。这个示例代码起作用了。
发布于 2017-12-22 06:22:39
您需要在GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)方法的正文中“描述”验证凭据的方法,而不是调用基方法。当您调用context.Validated(ClaimsIdentity)方法时,您将得到响应的承载令牌。
这里有一个很好的例子- 参见有关的第一个代码块。
或者您可以看到示例这里
"grant_type=password&username=test&password=test123“刚刚验证您的凭据ValidateClientAuthentication
否则,你的代码看上去没问题。
https://stackoverflow.com/questions/47934954
复制相似问题