我正在与Node,Express和Ionic一起创建一个Azure AD身份验证系统。
我正在使用passportjs
和passport-azure-ad
当我尝试使用后端登录时,一切正常,但是从前端调用时,我会得到:
无法加载 https://login.microsoftonline.com/ ...: 对预检请求的响应未通过访问控制检查:否 请求中存在“ Access-Control-Allow-Origin”标头 资源。因此,不允许访问原始“空”。
我遵循了此tutorial,将passport
设置为
这是后面的路线:
router.get('/auth/openid/return', passport.authenticate('azuread-openidconnect'), function(req, res, next) {
res.send(req.user);
});
router.get('/login', passport.authenticate('azuread-openidconnect'));
这是passport
的设置:
passport.serializeUser((user, done) => {
// user et le resultat que tu as mis dans les autres done en dessous
done(null, user.id)
});
passport.deserializeUser((id, done) => {
dbConsumer.findByPrimaryId(id).then(user => {
done(null, user)
});
});
passport.use(new OIDCStrategy({
// TODO ne pas commiter ces infooooooos
clientID: "correct clientId",
clientSecret: "correct client secret",
identityMetadata: "https://login.microsoftonline.com/constellationdemo.onmicrosoft.com/v2.0/.well-known/openid-configuration",
responseType: "code",
responseMode: "query",
redirectUrl: "https://localhost:3000/azure/auth/openid/return",
passReqToCallback: false
},
function(accessToken, refreshToken, profile, done) {
// look for the user
dbConsumer.findByAzureId(profile.oid).then(user => {
if(user.rowCount > 0){
logger.log({
level: 'info',
message: profile.displayName + "already exists"
});
// On passe un user pour qu'il reconnaisse le user dans le serializer au dessus
done(null, user.rows[0]);
}
else {
dbConsumer.insertUserProvider(profile.displayName, profile.oid).then(data => {
if(data.success) {
logger.log({
level: 'info',
message: "User: " + profile.displayName + "inserted"
});
// On passe un user pour qu'il reconnaisse le user dans le serializer au dessus
done(null, data.newUser);
}
}).catch(err => {
logger.log({
level: 'error',
message: err
});
});
}
}).catch(err => {
console.log("dans l err");
console.log(err);
});
}))
这是我的前台服务:
initHeaders() {
let headers = new HttpHeaders()
.set('Access-Control-Allow-Origin', "*")
.set("Content-Type", "application/json")
.set("Access-Control-Expose-Headers", "Content-Length");
return headers;
}
logToAzure() {
return this.http.get(this.domain + 'azure/login', {headers: this.initHeaders()})
}
当我在控制台中检查请求时,未设置任何标头。
我还在背面启用了cors;
我需要帮助