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