尝试访问受Azure AD保护的API时未经授权的访问

时间:2018-11-06 22:38:32

标签: azure-active-directory openid-connect bearer-token adal.js passport-azure-ad

我有两个应用程序:UI和API。我正在使用Azure AD保护两者。因此,我在Azure AD中创建了两个应用程序注册。我已经在UI项目中添加了对API的权限。

我正在passport-azure-ad中使用Nodejs,并遵循here中的指示。我使用的是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();
});

UI(一个Angular应用程序)正在使用adal-angular来针对Azure AD验证用户身份,并且工作正常。我正在尝试使用从此应用程序获得的令牌来与失败的API通讯。

UI组件:

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生成的请求以获取有关错误的更多详细信息。识别此配置有任何问题的任何帮助,或调试护照申请以缩小错误范围的方法,将大有帮助。

0 个答案:

没有答案