首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth2.0 PasswordGrant流

OAuth2.0 PasswordGrant流
EN

Stack Overflow用户
提问于 2017-12-22 01:51:57
回答 2查看 469关注 0票数 1

问:我是不是漏掉了什么东西,还是误解了应该叫什么功能?

因此,我通过创建一个使用WebApi实现OAuth2的测试Owin.OAuth项目,开始了简单的工作。按下路由并进入提供者是没有问题的,但是下面是代码:启动类:

代码语言:javascript
复制
    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);            
    }

就目前而言,这是一个基本的提供者类:

代码语言:javascript
复制
    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函数。

邮递员有效载荷:

代码语言:javascript
复制
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:

代码语言:javascript
复制
POST /Token HTTP/1.1
Host: localhost:57507
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdDp0ZXN0MTIz
grant_type=password

我是不是漏掉了什么还是曲解了它的工作原理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-29 21:15:36

好的,当我问这个问题时,我不正确地解释了调用的流程。

我在想,当使用密码授予时,第一个被调用的函数将是GrantResourceOwnerCredentials。实际上,OAuth指定的医生密码授予。总是调用ValidateClientAuthentication,然后调用GrantResourceOwnerCredentials

所以这只是我的一个误会。这个示例代码起作用了。

票数 0
EN

Stack Overflow用户

发布于 2017-12-22 06:22:39

您需要在GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)方法的正文中“描述”验证凭据的方法,而不是调用基方法。当您调用context.Validated(ClaimsIdentity)方法时,您将得到响应的承载令牌。

这里有一个很好的例子- 参见有关的第一个代码块

或者您可以看到示例这里

"grant_type=password&username=test&password=test123“刚刚验证您的凭据ValidateClientAuthentication

否则,你的代码看上去没问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47934954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档