Несанкционированный доступ при попытке доступа к API, защищенному Azure AD - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть два приложения: пользовательский интерфейс и API. Я использую Azure AD для защиты обоих. Поэтому я создал две регистрации приложений в Azure AD. Я добавил разрешения для API в проекте пользовательского интерфейса.

Я использую Nodejs с passport-azure-ad и следовал инструкциям здесь . Я использую expressjs вместо restify.

auth.js (конфигурация Azure):

credentials = {
    identityMetadata: `https://login.microsoftonline.com/<tenantName>.onmicrosoft.com/.well-known/openid-configuration`,
    clientID: <clientid>
};

const authenticationStrategy = new BearerStrategy(
    credentials,
    (token, done) => {
        let currentUser = null;

        let userToken = authenticatedUserTokens.find(user => {
            currentUser = user;
            user.sub === token.sub;
        });

    if (!userToken) {
        authenticatedUserTokens.push(token);
    }

    return done(null, currentUser, token);
  });

  module.exports= authenticationStrategy;

App.js: (файл запуска узла)

const authStrategy = require('./auth'); 
....
app.use(passport.initialize());
app.use(passport.session());

passport.use(authStrategy);

app.use("/api", passport.authenticate('oauth-bearer', { session: false }), 
    (req, res, next) =>{
       res.json({ message: 'response from API endpoint' });
       return next();
});

Пользовательский интерфейс Angular использует adal-angular для проверки подлинности пользователей в Azure AD и работает нормально. Я пытаюсь использовать токен, полученный из этого приложения, для связи с API, который не работает.

Компонент пользовательского интерфейса:

import { Component } from "@angular/core";
import { AdalService } from "adal-angular4";
import { environment } from "src/environments/environment";

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.sass"]
})
export class AppComponent {
  accessToken:string;

  ngOnInit() {
    this.adalService.handleWindowCallback();

    if (!this.adalService.userInfo.authenticated) this.adalService.login();

    this.accessToken = this.adalService.getCachedToken(this.adalService.config.clientId);
  }

  logout(){
    this.adalService.logOut();
  }

  constructor(private adalService: AdalService) {}
}

Я не могу отладить запросы, сгенерированные Passport, чтобы получить более подробную информацию об ошибке. Любая помощь в выявлении любых проблем с этой конфигурацией или способ отладки запросов на паспорт для сужения ошибки будут очень полезны.

...