【问题标题】:Passing Trusted Client Information with oAuth2orize for the "Resource Owner Password Flow"使用 oAuth2orize 为“资源所有者密码流”传递受信任的客户端信息
【发布时间】:2013-05-15 06:43:26
【问题描述】:

我在理解如何使用 oAuth2rize 和 passport.js 实现资源所有者密码流程时遇到了一些问题,特别是传输 client_id 和 client_secret 以便我可以对客户端进行一些检查以确保任何事情都进入这个目的使用特定“密码”授权类型的点 (/token) 是专门的官方应用程序,没有其他基于 id 和 secret 的应用程序。

在构建解决方案时,我可以取回一个令牌,但那是在我尝试对客户端进行任何验证之前。当我尝试访问传递到密码交换策略的客户端变量(发布到端点)时,我收到了基于文档的用户凭据(用户名、密码),但不是我需要在这里实现的。

我不知道如何获得实际的客户端凭据,我可以在密码函数源代码中看到您可以提供其他选项来覆盖对 req['user'] 的默认分配,但这是否意味着我有提供某种代码添加到 req 对象?

我已经设置了一些集成测试,这是我调用端点的方式(使用 SuperTest):

                request('http://localhost:43862')
                    .post('/oauth/token')
                    .type('form')
                    .send({ grant_type: 'password' })
                    .send({ client_id: 'goodClient' })
                    .send({ client_secret: 'asecret' })
                    .send({ username: 'good@user.com' })
                    .send({ password: 'goodpassword' })
                    .expect(200, done);

由于某种原因,我似乎完全在想这个,但由于某种原因,我完全被难住了......

【问题讨论】:

    标签: node.js oauth-2.0 passport.js


    【解决方案1】:

    正如预期的那样,这是一个理解问题,我们使用本地策略而不是 ClientPasswordStrategy,在发布令牌之前在密码交换中进行用户验证。

    我们现在正在使用 ClientPasswordStrategy 并在 exchange.password 函数中调用和内部调用我们的用户 api 以验证用户凭据,如果确定则颁发令牌。

    passport.use(new ClientPasswordStrategy(
    
    function(clientId, clientSecret, next){
    
        Client.verify(clientId, clientSecret, function(err, verified){
    
            if(!verified){
                return next(null, false);
            }
    
            next(null, clientId);
        });
    
    }
    ));
    
    passport.use(new BearerStrategy(
    function(token, next) {
    
        Token.getByToken(token, function(err, tokenObj){
    
            if(err)
                return next(err);
    
            if(!tokenObj)
                return next(null, false);
    
            User.getByUsername(tokenObj.username, function(err, user){
    
                return next(null, user, { scope: 'all' });
            });
        });
    }
    ));
    

    【讨论】:

    • 我打算使用 Express + passport + oauth2orize 来做同样的事情。我如何做到这一点?使用 ClientPasswordStrategy + LocalStrategy 的组合?你能分享一些你是如何做到的代码吗?
    • @ajithmanmu 老实说,开发停止了,所以所有代码都是旧的(回调)。我们使用 ClientPasswordStrategy 来验证用户并交换不记名令牌的凭据。对于后续请求,我们使用了不记名令牌方法,这可能适合也可能不适合您的账单。注意客户/用户是我们自己的api,与护照无关
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2020-10-02
    • 1970-01-01
    • 2013-09-11
    • 2021-03-10
    • 2017-11-14
    • 2015-04-01
    • 2013-11-21
    相关资源
    最近更新 更多