#passport-saml
#passport-saml
Вопрос:
Я не могу получить значение RelayState. Может кто-нибудь, пожалуйста, направить меня или предоставить ссылку на соответствующую документацию.
Это то, что у меня есть для моих настроек и маршрутов.
Настройка
const saml_strategy = new saml.Strategy(
{
'callbackUrl': 'https://callback-url/adfs/postResponse',
'entryPoint': 'https://entry-url/adfs/ls/',
'issuer': 'issuer-name',
'decryptionPvk': fs.readFileSync('./private.key', 'utf-8'),
'cert': [idp_cert],
'identifierFormat': null,
'disableRequestedAuthnContext': true,
'authnContext': ["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"],
'additionalParams':{'RelayState':'test'}
},
Маршруты
app.get(
'/',
function (req, res) {
if (req.isAuthenticated())
{
res.send( '{ "authenticated": true }' );
}
else
{
res.send( '{ "authenticated": false }' );
}
}
);
app.get(
'/login',
passport.authenticate('saml', { 'successRedirect': '/', 'failureRedirect': '/login' }),
function(req, res)
{
res.redirect('/');
}
);
///login/callback
app.post(
'/adfs/postResponse',
passport.authenticate('saml', { 'failureRedirect': '/', 'failureFlash': true }),
function(req, res)
{
res.redirect('/');
}
);
Ответ №1:
RelayState
задается из строки запроса начальной страницы запроса входа в систему, а затем (при условии, что IdP уважает его), оно доступно в теле ответа обратного вызова POST.
Итак, в вашем случае это должно сработать:
app.get(
'/login',
function(req, res, next){
// you could redirect to /login?RelayState=whatever, or set query here,
// the value must be encoded for passing in the query string:
req.query.RelayState = encodeURIComponent('my relay state');
},
passport.authenticate('saml', { 'successRedirect': '/', 'failureRedirect': '/login' }),
function(req, res)
{
res.redirect('/');
}
);
app.post(
'/adfs/postResponse',
passport.authenticate('saml', { 'failureRedirect': '/', 'failureFlash': true }),
function(req, res)
{
console.log(`relay state was ${decodeURIComponent(req.body.RelayState)}`);
res.redirect('/');
}
);
Комментарии:
1. Спасибо, Джеймс, я попробую и сообщу вам о результате.