基于ITfoxtec的IDP发起式SAML流程配置技术问询
问题:作为SP(服务提供商),是否仅需配置ACS端点接收SAML断言,接收后处理获取所需Claims,符合要求即可授予应用访问权限?
回答:是的,但必须完成断言的合法性验证(包括签名有效性、受众匹配、有效期检查等),ITfoxtec库会自动处理大部分验证逻辑。验证通过后,你需要将断言中的Claims同步到Duende IdentityServer的认证上下文,再授予用户应用访问权限。问题:是否需要向发送断言的IDP返回通知?
回答:不需要。IDP发起式流程中,IDP主动推送断言至SP的ACS端点,SP处理完成后无需向IDP返回通知,除非双方有额外自定义协议约定。问题:验证断言后,是在我方Identity Server中设置访问令牌,还是从断言中获取令牌?我们需定期检查该断言关联用户是否仍在IDP中认证,因此想了解IDP是否会颁发带过期时间的令牌,若否,是否需发起SP式SAML流程来验证?
回答:
- 验证断言后,访问令牌由Duende IdentityServer自行颁发,SAML断言仅作为用户身份的验证凭证,不能直接当作访问令牌使用。
- 关于用户认证状态检查:SAML断言自带
NotOnOrAfter字段(过期时间),可基于该字段限制会话有效期。若需实时确认用户在IDP的状态,优先查看IDP是否支持会话查询接口或SAML注销请求机制;若不支持,则需发起SP发起式SAML重新认证流程来验证用户当前状态。
问题:作为SP,是否需要自行颁发访问令牌?
回答:不需要。你的场景中Duende IdentityServer是统一身份认证服务,访问令牌由它负责生成和管理。你只需将SAML断言验证后的用户身份信息注入IdentityServer的认证流程,后续由IdentityServer完成令牌颁发逻辑。问题:登出时,仅需将用户从我方系统登出(移除我方颁发的令牌),无需从其IDP登出,是否可行?
回答:可行,这属于本地登出模式。只要业务场景不需要全局登出(即用户在IDP关联的其他应用也同步登出),仅清除我方系统的会话和令牌即可。除非IDP有强制会话绑定要求,否则该模式在大部分场景下都是被允许的。问题:是否需要在我方身份提供商中模拟登录,还是在startup.cs中添加SAML2认证方式后自动完成?
回答:无需模拟登录。在Startup.cs(.NET 5环境)中通过ITfoxtec库配置好SAML2认证方式后,当IDP推送断言至ACS端点时,库会自动处理身份验证流程,将用户身份转换为.NET的ClaimsPrincipal,Duende IdentityServer会基于该身份自动完成登录逻辑。问题:在.NET Core 5.0环境搭配Duende IdentityServer的情况下,是否可使用ITfoxtec.Identity.Saml2.MvcCore库?
回答:可以。ITfoxtec.Identity.Saml2.MvcCore支持.NET Core 3.1及以上版本,与.NET Core 5.0完全兼容;同时Duende IdentityServer也支持.NET Core 5.0,两者可正常集成。问题:如下代码配置是否可通过ITfoxtec库实现?
services.AddAuthentication() .AddSaml2(options => { var spOptions = new SPOptions { EntityId = new EntityId("https://localhost:44373/Saml2"), ReturnUrl = new Uri("https://localhost:44373"), MinIncomingSigningAlgorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", }; options.SPOptions = spOptions; options.IdentityProviders.Add(new IdentityProvider(new EntityId("https://www.example.com/SSO/SAML/App"), options.SPOptions) { AllowUnsolicitedAuthnResponse = false, MetadataLocation = "https://www.example.com/SSO/SAMLMetadata/App", LoadMetadata = true, }); });
回答:这段配置可以通过ITfoxtec库实现,但有几个关键调整点:
- 你的场景是IDP发起式流程,需将
AllowUnsolicitedAuthnResponse改为true,否则SP会拒绝IDP主动推送的断言。 MinIncomingSigningAlgorithm使用rsa-sha1安全性较低,建议优先使用http://www.w3.org/2001/04/xmldsig-more#rsa-sha256或更高强度的算法,同时要确保IDP配置的签名算法与SP一致。- 配置完成后,还需在控制器中添加ACS端点的处理代码,比如通过
Saml2PostBinding接收并处理断言的HttpPost方法。
内容的提问来源于stack exchange,提问作者Jawahar

