【问题标题】:Can we get access token from authorization code in passport js我们可以从护照js中的授权码中获取访问令牌吗
【发布时间】:2018-11-14 18:12:39
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您查看passport oauth2 strategy,您在此处描述的内容:

    我想知道passport js中是否有接受授权码并返回token的函数

    由护照办理。鉴于链接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. 在我们的实现中,我们接收代码并获取访问令牌和刷新令牌。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2015-02-24
      • 2020-07-19
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多