Node.js 通过oAuth2orize为;“资源所有者密码流”;
我在理解如何使用oAuth2rize和passport.js实现资源所有者密码流时遇到了一些问题,特别是在传输客户机id和客户机机密时,这样我就可以对客户机进行一些检查,以确保使用特定的“密码”进入此端点(/token)授权类型是一个官方申请,没有其他基于id和机密的申请 在构建解决方案时,我可以拿回一个令牌,但那是在我尝试对客户端进行任何验证之前。当我尝试访问传递到密码交换策略中的客户机变量(发布到端点)时,我会收到用户凭据(用户名、密码),这是基于预期的文档,但不是我在这里需要实现的 我无法理解如何获得实际的客户端凭据,我可以在密码函数源代码中看到,您可以提供其他选项来覆盖对req['user']的默认分配,但这是否意味着我必须提供某种代码来添加到req对象 我已经设置了一些集成测试,下面是我如何调用我的端点(使用SuperTest):Node.js 通过oAuth2orize为;“资源所有者密码流”;,node.js,oauth-2.0,passport.js,Node.js,Oauth 2.0,Passport.js,我在理解如何使用oAuth2rize和passport.js实现资源所有者密码流时遇到了一些问题,特别是在传输客户机id和客户机机密时,这样我就可以对客户机进行一些检查,以确保使用特定的“密码”进入此端点(/token)授权类型是一个官方申请,没有其他基于id和机密的申请 在构建解决方案时,我可以拿回一个令牌,但那是在我尝试对客户端进行任何验证之前。当我尝试访问传递到密码交换策略中的客户机变量(发布到端点)时,我会收到用户凭据(用户名、密码),这是基于预期的文档,但不是我在这里需要实现的 我无法
出于某种原因,我似乎完全考虑过了,但出于某种原因,我完全被难住了……正如预期的那样,这是一个理解问题,我们使用本地策略,而不是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' });
});
});
}
));