Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过oAuth2orize为;“资源所有者密码流”;_Node.js_Oauth 2.0_Passport.js - Fatal编程技术网

Node.js 通过oAuth2orize为;“资源所有者密码流”;

Node.js 通过oAuth2orize为;“资源所有者密码流”;,node.js,oauth-2.0,passport.js,Node.js,Oauth 2.0,Passport.js,我在理解如何使用oAuth2rize和passport.js实现资源所有者密码流时遇到了一些问题,特别是在传输客户机id和客户机机密时,这样我就可以对客户机进行一些检查,以确保使用特定的“密码”进入此端点(/token)授权类型是一个官方申请,没有其他基于id和机密的申请 在构建解决方案时,我可以拿回一个令牌,但那是在我尝试对客户端进行任何验证之前。当我尝试访问传递到密码交换策略中的客户机变量(发布到端点)时,我会收到用户凭据(用户名、密码),这是基于预期的文档,但不是我在这里需要实现的 我无法

我在理解如何使用oAuth2rize和passport.js实现资源所有者密码流时遇到了一些问题,特别是在传输客户机id和客户机机密时,这样我就可以对客户机进行一些检查,以确保使用特定的“密码”进入此端点(/token)授权类型是一个官方申请,没有其他基于id和机密的申请

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

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

我已经设置了一些集成测试,下面是我如何调用我的端点(使用SuperTest):


出于某种原因,我似乎完全考虑过了,但出于某种原因,我完全被难住了……

正如预期的那样,这是一个理解问题,我们使用本地策略,而不是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,与passport无关
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' });
        });
    });
}
));