我们可以从护照js中的授权代码获取访问令牌

时间:2018-06-05 09:44:46

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

我有一个客户端向我发送从oauth2授权端点获得的授权代码。我可以使用我的nodejs后端代码创建一个请求,以使用此授权代码从令牌端点获取令牌。但是,我认为护照js应该已经有了这个逻辑,因为它可以在验证回调函数中返回令牌(前提是整个授权流程都是通过护照完成的)。我想知道护照js中是否有接受授权码并返回令牌的功能。我在文档中找不到这个。还尝试调试护照js代码,但没有成功:(

1 个答案:

答案 0 :(得分:1)

如果你看一下passport oauth2 strategy,你在这里描述的是什么:

  

我想知道护照js中是否有接受授权码并返回令牌的功能

由护照处理。鉴于链接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. 使用我们的东西
  3. 修补getOAuthAccessToken方法
  4. 在我们的实现中,我们正在接收代码并获取访问令牌和刷新令牌。
  5. 您还可以提供回调并执行它,而不是返回OAuth2对象。