我正在尝试通过Azure AD为我的网站设置身份验证,这些网站是使用passport-azure-ad包使用React、NodeJS和Express构建的。身份验证工作成功,我能够对令牌进行身份验证并检索令牌,但即使我在admin.microsoft.com或sharepoint.mytenant.com上登录了会话,登录时也会显示登录提示。我知道passport-azure-ad文档说可以使用单点登录,但我还没有找到任何关于如何设置它的指导。
passport策略:
passport.use(new OIDCStrategy(
{
identityMetadata: `${process.env.OAUTH_ID_METADATA}`,
clientID: process.env.OAUTH_APP_ID,
responseType: 'code id_token',
responseMode: 'form_post',
redirectUrl: process.env.OAUTH_REDIRECT_URI,
allowHttpForRedirectUrl: true,
clientSecret: process.env.OAUTH_APP_PASSWORD,
passReqToCallback: false,
scope: process.env.OAUTH_SCOPES.split(' ')
},
signInComplete
));signInComplete:用户当前存储在内存中,而不是db中。使用simple-oath2。
async function signInComplete(iss, sub, profile, accessToken, refreshToken, params, done) {
if (!profile.oid) {
return done(new Error("No OID found in user profile."));
}
try{
console.log('in here');
const user = await graph.getUserDetails(accessToken);
if (user) {
// Add properties to profile
profile['email'] = user.mail ? user.mail : user.userPrincipalName;
}
} catch (err) {
return done(err);
}
// Create a simple-oauth2 token from raw tokens
let oauthToken = oauth2.accessToken.create(params);
// Save the profile and tokens in user storage
users[profile.oid] = { profile, oauthToken };
return done(null, users[profile.oid]);
}授权功能:
/* GET auth callback. */
router.get('/signin',
function (req, res, next) {
passport.authenticate('azuread-openidconnect',
{
response: res,
prompt: 'login',
failureRedirect: '/',
successRedirect: '/'
}
)(req,res,next);
}
);
// <CallbackRouteSnippet>
router.post('/callback',
function(req, res, next) {
passport.authenticate('azuread-openidconnect',
{
response: res,
failureRedirect: '/',
successRedirect: '/'
}
)(req,res,next);
}
);
// </CallbackRouteSnippet>
router.get('/signout',
function(req, res) {
req.session.destroy(function(err) {
req.logout();
res.redirect('/');
});
}
);感谢您的帮助,谢谢。
发布于 2020-07-31 04:18:36
请参考此示例,它可能会帮助您https://github.com/AzureAD/passport-azure-ad
示例passport- Azure -ad已经过测试,可以与Microsoft Azure Active Directory和Microsoft Active Directory联合身份验证服务一起使用。
https://stackoverflow.com/questions/63022963
复制相似问题