gpt4 book ai didi

node.js - 我们可以从 Passport js中的授权码获取访问 token 吗

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:18 25 4
gpt4 key购买 nike

我有一个客户端向我发送从 oauth2 授权端点获得的授权代码。我可以从我的 Nodejs 后端代码创建一个请求,以使用此授权代码从 token 端点获取 token 。但是,我认为passport js应该已经有一个逻辑,因为它可以在验证回调函数中返回 token (假设整个授权流程是由passport完成的)。我想知道 Passport js中是否有一个函数可以接受授权码并返回 token 。我在文档中找不到这个。也尝试调试 Passport js代码,但没有成功:(

最佳答案

如果您查看passport oauth2 strategy ,你在这里描述的是:

I would like to know if there is a function in passport js that accepts the Authorization code and returns the tokens

通过 Passport 办理。给出链接 1 中的示例,您应该对策略进行以下配置:

passport.use(new OAuth2Strategy({
authorizationURL: 'https://www.example.com/oauth2/authorize',
tokenURL: 'https://www.example.com/oauth2/token',
clientID: EXAMPLE_CLIENT_ID,
clientSecret: EXAMPLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/example/callback"
},
function(accessToken, refreshToken, profile, cb) {
// Do whatever here with the profile
}
));

callbackURL 是您要查找的“函数”。让我解释一下:

OAuth2 规范(我假设您使用 Authorization Code Grant 流程)规定用户被重定向到身份提供商(authorizationURL)。然后,身份提供商会提示用户输入凭据,经过身份验证后,身份提供商会将用户连同代码一起发送回您的应用程序。此代码应由与callbackURL 端点链接的回调方法处理。他们的示例中是这样描述的:

app.get('/auth/example/callback',
passport.authenticate('oauth2', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});

策略中定义的回调应该管理您想要实现的目标。

如果这不适合您的需求,您可以随时进行猴子修补:)这是一个您可以尝试的示例:

'use strict';

var OAuth2 = require('oauth').OAuth2;

function getTokenFromCode (code, clientID, clientSecret, authorizationURL, tokenURL) {
return () => {
var oAuth2 = new OAuth2(clientID, config.clientSecret,
'', config.authorizationURL, config.tokenURL);
var _getOAuthAccessToken = oAuth2.getOAuthAccessToken;
oAuth2.getOAuthAccessToken = (code, params, callback) => {
if (responseType) {
params.response_type = responseType;
}
_getOAuthAccessToken.call(oAuth2, code, params, callback);
};
return oAuth2;
};
}

这段代码的作用如下:

  1. 实例化 OAuth2 对象并使用所需的配置对其进行初始化
  2. Monkey 使用我们的东西修补 getOAuthAccessToken 方法
  3. 在我们的实现中,我们接收代码并获取访问 token 和刷新 token 。

您还可以提供回调并执行它,而不是返回 OAuth2 对象。

关于node.js - 我们可以从 Passport js中的授权码获取访问 token 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50697010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com