javascript - node.js 中的模块 passport-oauth2 : extra parameters to be included in the authorization request

标签 javascript node.js oauth-2.0

我在 node.js 应用程序中实现 Oauth2 身份验证时遇到问题,我需要在授权请求中添加一个额外的参数,但该模块只是忽略了“未知”参数。

我的代码附在下面。被忽略的参数是 APIName

var OAuth2Strategy = require('passport-oauth2').Strategy;

// load the auth variables
var configAuth = require('./auth');

module.exports = function(passport) {

    passport.use('ihealth', new OAuth2Strategy({
            authorizationURL: 'https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/',
            tokenURL: 'https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/',
            clientID: configAuth.iHealthAuth.clientID,
            clientSecret: configAuth.iHealthAuth.clientSecret,
            callbackURL: configAuth.iHealthAuth.callbackURL,
            APIName : 'OpenApiActivity'
        },
        function(token, refreshToken, profile, done) {

            // ...

        }
    ));
};

我知道 APIName 被忽略的原因是我在浏览器中看到了 URL:

https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/?response_type=code&redirect_uri=SOMEREDIRECTURI&client_id=SOMECLIENTID

我想知道如何启用向授权请求添加额外参数?也许通过覆盖 node_modules/passport_oauth2/lib/strategy.js 中的函数 OAuth2Strategy.prototype.authorizationParams,在下载的文件中看起来像这样:

/**
 * Return extra parameters to be included in the authorization request.
 *
 * Some OAuth 2.0 providers allow additional, non-standard parameters to be
 * included when requesting authorization.  Since these parameters are not
 * standardized by the OAuth 2.0 specification, OAuth 2.0-based authentication
 * strategies can overrride this function in order to populate these parameters
 * as required by the provider.
 *
 * @param {Object} options
 * @return {Object}
 * @api protected
 */
OAuth2Strategy.prototype.authorizationParams = function(options) {
  return {};
};

最佳答案

您可以如下覆盖OAuth2Strategy.prototype.authorizationParams

 var myStrategy = new OAuth2Strategy({
        authorizationURL: 'https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/',
        tokenURL: 'https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/',
        clientID: configAuth.iHealthAuth.clientID,
        clientSecret: configAuth.iHealthAuth.clientSecret,
        callbackURL: configAuth.iHealthAuth.callbackURL
    },
    function(token, refreshToken, profile, done) {
        // ...
    });

    myStrategy.authorizationParams = function(options) {
      return {
        APIName : 'OpenApiActivity'
      };
    };

    passport.use('ihealth',myStrategy);

对于 Microsoft ADFS OAuth 2,这可用于添加所需的 source 参数;如果希望回调也包含一些特定值,则添加 state 参数。

调用passport.authenticate时可以设置function(options)中的options:

router.get('/auth', passport.authenticate('ihealth', {time: Date.now()}));

关于javascript - node.js 中的模块 passport-oauth2 : extra parameters to be included in the authorization request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357879/

相关文章:

javascript - 调用 React 中作为 prop 传递的父函数

javascript - 使用 jQuery 将当前日期增加 10 天

javascript - 是否有用于 XML 绑定(bind)的 JavaScript API——类似于 Java 的 JAXB?

node.js - 如何从导致突变失败的 graphql 响应中删除 `__typename` 字段

javascript - sinon 没有正确恢复 stub 原型(prototype)方法?

javascript - 如何在 Web 界面中授权应用程序脚本?

calendar - google oauth2 刷新 token 限制

android - Oauth 2.0 : client id and client secret exposed, 是安全问题吗?

javascript - 为 getScript() 添加超时

exception - 为什么使用nodejs上传异常