.NET 4.8前端SP1与WCF后端SP2基于ADFS 4.0的SAML令牌复用问询
方案可行性与实现指导
你的需求完全可以基于.NET 4.8和ADFS 4.0实现,核心思路是利用ADFS的多受众令牌支持或ActAs令牌转发机制,替代存在问题的Kerberos双跳架构。以下是具体实现方案和配置要点:
两种核心实现方案
方案1:ADFS签发包含SP2受众的多断言令牌
让ADFS直接为SP1签发同时包含SP1和SP2受众的SAML令牌,这样SP1验证令牌后可直接将其传递给SP2,SP2验证令牌时会确认自身受众在允许列表内。
配置步骤:
- 在ADFS中分别为SP1和SP2创建信赖方信任,记录两者的标识符(比如
https://sp1.yourdomain.com和https://sp2.yourdomain.com/service)。 - 修改ADFS中SP1的签发转换规则,添加一条规则将SP2的标识符加入令牌的
AudienceRestriction列表。示例规则逻辑:添加声明类型
http://schemas.microsoft.com/ws/2008/06/identity/claims/audience,值设为SP2的标识符,同时保留SP1的受众声明。 - 前端SP1在发起SAML认证请求时,可在
AuthnRequest的AudienceRestriction字段中同时指定SP1和SP2的标识符,确保ADFS生成包含双受众的令牌。
方案2:基于ActAs的令牌转发(更规范的委托模式)
SP1先获取针对自身的SAML令牌,再以用户身份向ADFS请求一个专门针对SP2的新令牌(即ActAs场景),SP2验证这个新令牌即可完成用户身份确认。
配置步骤:
- 在ADFS的SP1信赖方属性中,勾选允许此信赖方作为其他用户请求令牌(ActAs权限)。
- SP1验证完ADFS签发的用户令牌后,使用WCF的
ChannelFactory创建调用SP2的通道,通过SecurityTokenProvider将用户令牌作为ActAs令牌,向ADFS请求SP2的专用令牌。 - SP2的WCF配置信任ADFS作为令牌签发方,验证令牌的受众为自身标识符。
WCF服务(SP2)核心配置示例
以下是SP2使用issuedToken模式的关键配置(web.config):
<system.serviceModel> <bindings> <wsHttpBinding> <binding name="IssuedTokenBinding"> <security mode="Message"> <message clientCredentialType="IssuedToken" negotiateServiceCredential="false" establishSecurityContext="false"/> </security> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="SP2ServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceCredentials> <issuedTokenAuthentication> <!-- 指定SP2的受众标识符 --> <allowedAudienceUris> <add value="https://sp2.yourdomain.com/service"/> </allowedAudienceUris> <!-- 信任ADFS作为签发方 --> <issuerRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerRegistry, System.IdentityModel"> <trustedIssuers> <add thumbprint="YOUR_ADFS_CERT_THUMBPRINT" name="http://adfs.yourdomain.com/adfs/services/trust"/> </trustedIssuers> </issuerRegistry> </issuedTokenAuthentication> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <services> <service name="SP2.Service" behaviorConfiguration="SP2ServiceBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="IssuedTokenBinding" contract="SP2.IService"/> </service> </services> </system.serviceModel>
关键注意事项
- 令牌有效性验证:SP1必须先验证ADFS令牌的签名、有效期、受众范围,确认合法后再进行转发或请求新令牌。
- 声明配置:在ADFS的SP1和SP2信赖方中,配置声明规则确保令牌包含
UPN、email、sAMAccountName等所需标识类声明,无需额外权限类声明。 - 加密保护:如果令牌包含敏感信息,需配置ADFS使用SP2的证书加密断言,确保只有SP2能解密令牌内容。
- 令牌存储:SP1需将用户令牌安全存储(如加密Session、HttpOnly加密Cookie),避免令牌泄露风险。
- 有效期设置:调整ADFS令牌的有效期,确保覆盖SP1调用SP2的业务流程时长,避免令牌中途过期。
内容的提问来源于stack exchange,提问作者gabrielgbs97
相关产品推荐
相关产品推荐

