2016-05-31 5 views
3

Я пытаюсь разрешить мой узел nodejs на сервере идентификации. Я использую библиотеку pass-openidconnect в nodejs. Мой nodejs код:Проблема с идентификатором IdentityServer nodejs

var express = require('express'); 
var session = require('express-session'); 
var RedisStore = require('connect-redis')(session); 
var Strategy = require('passport-openidconnect').Strategy; 

module.exports.configure = function configure(app, passport) { 

    var auth = { 
     authorizationURL: 'https://localhost:44333/core/connect/authorize', 
     tokenURL: 'https://localhost:44333/core/connect/token', 
     userInfoURL: 'https://localhost:44333/core/connect/userinfo', 
     clientID: 'NodeJsClient', 
     clientSecret: 'fakeSecret', 
     callbackURL: '/auth/callback', 
     scope: 'openid profile email offline_access', 
     responseType: "id_token" 
    }; 

    app.use(session({ 
      secret: 'someSecret', 
      resave: false, 
      saveUninitialized: false, 
      secure: true, 
      store: new RedisStore({ 
       host: '127.0.0.1', 
       port: 6379 
      }) 
     } 
    )); 

    app.use(passport.initialize()); 
    app.use(passport.session()); 

    passport.use(new Strategy(auth, function (iss, sub, profile, jwtClaims, accessToken, refreshToken, params, verified) { 
     verified(null, Object.assign({}, profile, {token: accessToken})); 
    })); 

    passport.serializeUser(function (user, done) { 
     done(null, {id: user.id, name: user.displayName, token: user.token}); 
    }); 

    passport.deserializeUser(function (user, done) { 
     done(null, user); 
    }); 

    app.get('/auth/login', passport.authenticate('openidconnect', {})); 

    app.get('/auth/callback', passport.authenticate('openidconnect', {}), 
     function (req, res) { 
      if (!req.user) { 
       throw new Error('user null'); 
      } 
      res.redirect("/"); 
     } 
    ); 
}; 

Идентичность стороне сервера:

new Client() 
       { 
        ClientId = "NodeJsClient", 
        ClientName = "Nodejs Demo Client", 
        AccessTokenType = AccessTokenType.Jwt, 

        ClientSecrets = new List<Secret>() 
        { 
         new Secret("fakeSecret".Sha256()) 
        }, 

        Flow = Flows.AuthorizationCode, 
        RedirectUris = new List<string>() { "http://localhost:5200/auth/callback" }, 
        AllowedScopes = new List<string>() 
        { 
         Constants.StandardScopes.OpenId, 
         Constants.StandardScopes.Profile, 
         Constants.StandardScopes.Email, 
         Constants.StandardScopes.Roles, 
         Constants.StandardScopes.Address, 
         Constants.StandardScopes.OfflineAccess 
        }, 

        AccessTokenLifetime = 3600 
       } 

И когда я пытаюсь разрешить после предоставления разрешения на персональных данных у меня есть сообщение об ошибке:

InternalOAuthError: failed to obtain access token

я разобрался что в запросе перенаправления к моему приложению нет токена. В чем проблема? И вы хорошо документировали библиотеку nodejs для работы с

OpenID Connect

ответ

3

Я выяснил, в чем проблема. Iside passport-openidconnect Я нашел более подробную ошибку: "Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE". Решили его, как описано в this question. В этот момент решение полностью удовлетворяет меня.

Смежные вопросы