You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在passport-saml的SP中获取samltest.id的「不记住登录」自定义断言?

基于passport-saml获取samltest.id「Don't remember login」偏好的方案

1. 先确认IDP是否返回该属性

passport-saml默认的profile对象仅提取标准SAML属性,可能未包含「Don't remember login」的偏好设置。你可以在回调函数中打印完整的SAML响应数据,验证IDP是否返回了对应属性:

function(request, profile, done) {
    // 打印原始SAML响应内容
    console.log('原始SAML响应:', request.body.SAMLResponse);
    // 打印解析后的完整断言(若存在)
    console.log('解析后的断言数据:', profile._raw || '无原始断言');
    // 原有业务代码...
}

拿到原始SAML响应后,可通过SAML解码工具解析,查看断言中的属性声明,确认是否存在对应「不记住登录」的属性(比如rememberMe或特定OID标识的属性)。

2. 配置passport-saml提取自定义属性

如果IDP确实返回了该属性,需在SamlStrategy的配置中添加属性映射,让passport-saml将其提取到profile对象中:

const samlStrategy = new SamlStrategy(
    {
        // 原有配置项...
        // 映射IDP返回的自定义属性到profile
        attributeMap: {
            'rememberMe': 'rememberMe' // 替换为IDP实际返回的属性名
        }
    },
    // 回调函数...
);

配置完成后,即可在回调的profile对象中通过profile.rememberMe获取用户的偏好设置(通常false表示用户选择了「Don't remember login」)。

3. 实现「不记住登录」的会话控制

拿到用户偏好后,将其存储到本地会话或用户数据库中。下次用户发起认证请求时,动态设置forceAuthn参数为true,强制IDP重新认证:

app.get('/login', (req, res, next) => {
    // 从会话或数据库获取用户的「不记住登录」偏好
    const forceReAuth = req.session?.user?.rememberMe === false;
    passport.authenticate('saml', {
        forceAuthn: forceReAuth
    })(req, res, next);
});

4. 额外说明

  • samltest.id默认可能未开启该属性的输出,你需要登录samltest.id平台,找到对应的SP配置条目,编辑属性请求列表,添加「rememberMe」或对应的属性OID,确保IDP会返回该属性。
  • 若IDP无法返回该属性,可退而求其次在SP端处理:当用户选择「不记住登录」时,SP不创建持久会话,将会话过期时间设置为浏览器关闭即失效。

内容的提问来源于stack exchange,提问作者fenris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:49