微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 使用oAuth2orize传递可信客户端信息以获取“资源所有者密码流”

我有一些问题,了解如何使用oAuth2rize和passport.js实现资源所有者密码流,特别是传输client_id和client_secret,以便我可以对客户端进行一些检查,以确保任何进入此终点的任何内容(/令牌)使用特定的“密码”授权类型具体是官方应用程序,没有其他基于id和秘密.

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

我无法理解我如何获得实际的客户端凭据,我可以在密码函数代码中看到,您可以提供其他选项来覆盖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);

出于某种原因,我似乎完全在想这个,但由于某种原因,我完全被困……

解决方法

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

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

passport.use(new ClientPasswordStrategy(

function(clientId,clientSecret,next){

    Client.verify(clientId,function(err,verified){

        if(!verified){
            return next(null,false);
        }

        next(null,clientId);
    });

}
));

passport.use(new BearerStrategy(
function(token,next) {

    Token.getByToken(token,tokenObj){

        if(err)
            return next(err);

        if(!tokenObj)
            return next(null,false);

        User.getByUsername(tokenObj.username,user){

            return next(null,user,{ scope: 'all' });
        });
    });
}
));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐