.NET Core集成OIOSAML3时如何配置SecurityToken断言有效期为5分钟
.NET Core 环境下OIOSAML 3 断言5分钟有效期配置方案
核心结论
SAML断言的
validFrom、validTo属性完全由IdP侧签发逻辑控制,NemLog-in3公共IdP默认的1小时有效期是全局配置,SP无法在发起AuthnRequest认证请求时强制IdP修改断言有效期。
符合需求的可行实现方案
你不需要手动解析断言校验时间,通过SP侧的SAML校验框架自带配置即可实现和"动态修改validTo"完全等价的效果,同时满足OIOSAML3测试规范要求:
- 若使用官方
OIOSAML3.AspNetCore集成库
直接修改配置项MaximumAssertionAge为5分钟即可,该参数会自动校验断言签发时间(即validFrom)到SP校验时间的间隔,超过阈值直接拒绝登录,内置逻辑自动执行不需要额外开发:
// Program.cs 配置示例 builder.Services.AddOiosaml3(options => { // 其他IdP、SP元数据等常规配置省略 options.MaximumAssertionAge = TimeSpan.FromMinutes(5); });
- 若基于
Microsoft.IdentityModel.Tokens.Saml自定义SAML校验逻辑
通过TokenValidationParameters的LifetimeValidator委托覆盖默认有效期校验逻辑即可:
var tokenValidationParameters = new TokenValidationParameters { // 其他校验配置(受众、签发者、签名证书等)省略 LifetimeValidator = (notBefore, expires, securityToken, validationParameters) => { // 校验断言签发时间存在 if (!notBefore.HasValue) return false; // 强制校验签发时间距离当前时间不超过5分钟 if (DateTime.UtcNow - notBefore.Value.ToUniversalTime() > TimeSpan.FromMinutes(5)) { return false; } // 保留默认的断言过期时间校验逻辑 return expires.HasValue && DateTime.UtcNow < expires.Value.ToUniversalTime(); } };
内容的提问来源于stack exchange,提问作者Teilmann
相关产品推荐
相关产品推荐

