nodej.js中的模块passport-oauth2:额外的参数将包含在授权请求中

Jac*_*ill 2 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) {

            // ...

        }
    ));
};
Run Code Online (Sandbox Code Playgroud)

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

https://api.ihealthlabs.com:8443/OpenApiV2/OAuthv2/userauthorization/?response_type=code&redirect_uri=SOMEREDIRECTURI&client_id=SOMECLIENTID
Run Code Online (Sandbox Code Playgroud)

我想知道如何启用向授权请求中添加其他参数?也许通过重写功能OAuth2Strategy.prototype.authorizationParamsnode_modules/passport_oauth2/lib/strategy.js,它看起来像这样在donwloaded文件:

/**
 * 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 {};
};
Run Code Online (Sandbox Code Playgroud)

bal*_*afi 5

您可以覆盖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);
Run Code Online (Sandbox Code Playgroud)

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

optionsfunction(options)可以调用时设置passport.authenticate

router.get('/auth', passport.authenticate('ihealth', {time: Date.now()}));
Run Code Online (Sandbox Code Playgroud)