2016-04-19 2 views
0

Приложение моего приложения MEAN использует Azure AD для аутентификации. Я использую «паспорт-азуре-объявление» модуль для аутентификации веб-api. На основании post & reply here я понял, чтопаспорт-азуре-объявление, он анализирует и проверяет токен?

Если пользователь уже заверен клиента (UI), то для каждого вызова API, клиент также отправит маркер на сервер. А затем на сервере мы можем использовать стратегию переноса для «Авторизовать» доступ пользователя к API.

Теперь в моем сценарии я просто хотел удостовериться, что пользователь аутентифицирован, и если он тогда разрешит ему получить доступ к API.

Вопрос
1. Когда сервер выполняет метод «passport.authenticate („OAuth-носитель“)», будет паспорта-лазурь-объявления автоматически анализировать & проверяет маркер, который получил от клиента или сделать Мне нужны какие-то дополнительные шаги?
2. Что происходит, когда не удается проверить токен или если токен плох или подделан?

Вот мой полный код
AzureAuthenticationService.js

"use strict"; 
    var passport = require('passport'); 
    var OIDCBearerStrategy = require('passport-azure-ad').BearerStrategy; 

    var options = {  
     identityMetadata: 'https://login.microsoftonline.com/tenantid/.well-known/openid-configuration', 
     validateIssuer: true, 
     passReqToCallback: false, 
     loggingLevel: 'error' 
    }; 

    function configure(app) {  
     app.use(passport.initialize()); 
     app.use(passport.session()); 

     passport.use(new OIDCBearerStrategy(options, 
      function(token, done) { 
       //is there anything else i need to do here? 
       return done(null, token.unique_name, token);    
      })); 

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

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

    function authenticate(req, res, next) { 
     //is there anything else i need to do here? 
     passport.authenticate('oauth-bearer')(req, res, next); 
    } 

server.js
'UserService' ниже я использовал, чтобы получить пользователей из базы данных, и я хочу, чтобы защитить этот API звонок

 "use strict"; 

    var authentication = require('./AzureAuthenticationService'); 
    var userService = require('./UserService'); 

    // Initialize server 
    var express = require('express'); 
    var app = exports.app = express(); 
    authentication.configure(app); 

    // Set routes 
    app.get('/api/users',authentication.authenticate,userService.getUsers); 

ответ

1

Я сторонник passport-azure-ad. Чтобы ответить на ваш вопрос, да, он подтвердит вам токен. Он делает это, используя вызов jwtVerify в коде. Y ou can see where this starts here. Он расшифрует токен, используя ключи, которые находятся в конечной точке метаданных, которая находится в вашей конфигурации.

Если проверка не удалась, вы получите сообщение об ошибке с кодом, как вы будете видеть выше, и ссылка здесь:

jwt.verify(token, PEMkey, options, function(err, token) { 
 
      if (err) { 
 
       if (err instanceof jwt.TokenExpiredError) { 
 
        log.warn("Access token expired"); 
 
        done(null, false, 'The access token expired'); 
 
       } else if (err instanceof jwt.JsonWebTokenError) { 
 
        log.warn("An error was received validating the token", err.message); 
 
        done(null, false, util.format('Invalid token (%s)', err.message)); 
 
       } else { 
 
        done(err, false); 
 
       }

Позвольте мне знать, если это помогает, и если да знак ответил. Благодаря!