SAML响应中NotOnOrAfter条件的来源与修改位置咨询
SAML断言NotOnOrAfter超时问题排查与解决
问题描述
我有一个客户环境,SAML响应中的NotOnOrAfter条件始终为登录后5分钟。身份提供商(IdP)是Okta,服务提供商(SP)为Shibboleth SP 3。我在Shibboleth端没找到添加该条件的配置,Okta方称并未发送这个条件,但我对此存疑。
我尝试添加忽略该条件的PolicyRules,还是存在5分钟超时问题:
<PolicyRule type="Ignore">saml2:NotOnOrAfter</PolicyRule>
请问该超时条件是由IdP还是SP添加的?可以在何处修改?
附SAML响应片段:
<saml2:Subject xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">userid</saml2:NameID> <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> <saml2:SubjectConfirmationData InResponseTo="_bb4020da3209979ab2c018077ec29894" NotOnOrAfter="2023-02-07T21:25:38.782Z" Recipient=https://sitename.com/Shibboleth.sso/SAML2/POST/> </saml2:SubjectConfirmation> </saml2:Subject> <saml2:Conditions xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" NotBefore="2023-02-07T21:15:38.782Z" NotOnOrAfter="2023-02-07T21:25:38.782Z"> <saml2:AudienceRestriction> <saml2:Audience>https://sitename.com/shibboleth</saml2:Audience> </saml2:AudienceRestriction> </saml2:Conditions>
分析与解决
1. 超时条件的归属
从提供的SAML响应片段来看,NotOnOrAfter同时出现在<SubjectConfirmationData>和<Conditions>节点中,这两个字段均由Okta(IdP)生成并发送。
Shibboleth SP作为服务端,默认不会主动添加这类断言级别的时间限制,仅负责验证IdP发送的条件。你添加的Ignore规则无效,是因为该规则针对的是Shibboleth自身的会话策略,而非忽略IdP断言中的NotOnOrAfter字段——SP会先验证断言合法性,断言过期后直接拒绝,不会触发忽略策略。
2. 修改位置
Okta侧调整断言过期时间
- 登录Okta管理后台,找到对应SAML应用集成。
- 进入Sign On标签页,点击Edit编辑SAML设置。
- 在Advanced Settings中找到
Assertion Expiration选项,默认值为5分钟,修改为所需时长(如60分钟)。 - 保存配置后重新发起SAML登录,验证响应中的
NotOnOrAfter是否更新。
补充:Shibboleth会话超时调整(可选)
若需在SP侧控制用户本地会话时长,修改Shibboleth的shibboleth2.xml配置:
- 找到
<Sessions>节点,调整timeout属性(单位为秒),例如设置为3600(1小时):
<Sessions lifetime="28800" timeout="3600" relayState="ss:mem" checkAddress="false">
- 注意:该设置仅控制SP本地会话,无法覆盖IdP断言的过期时间,需确保IdP断言过期时间不短于SP会话超时,否则用户会因断言提前过期被强制登出。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

