如何为.NET MVC网站生成适用于AD FS/Ping AD的FederationMetadata.xml文件(替代已停用的WIF SDK方案)
生成WS-Federation应用的FederationMetadata.xml方案(少代码改动版)
我来给你分享几个实用的方案,既能搞定FederationMetadata.xml的生成需求,又能尽量少改动现有代码:
方案1:手动生成元数据文件(零代码改动)
FederationMetadata本质是符合标准的XML文件,只要填对关键参数就能直接用。你可以复制下面的模板,替换掉占位符后保存为FederationMetadata.xml:
<?xml version="1.0" encoding="utf-8"?> <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://你的应用根域名"> <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol urn:oasis:names:tc:SAML:1.1:protocol http://schemas.xmlsoap.org/ws/2005/02/trust http://schemas.xmlsoap.org/ws/2004/09/policy"> <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat> <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://你的应用根域名/signin-wsfed" index="0" isDefault="true"/> <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://你的应用根域名/signout-wsfed"/> <KeyDescriptor use="signing"> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <X509Data> <X509Certificate>你的证书Base64编码(去掉首尾的证书标记)</X509Certificate> </X509Data> </KeyInfo> </KeyDescriptor> </SPSSODescriptor> </EntityDescriptor>
关键参数说明:
entityID:你的应用唯一标识,一般填应用的根域名即可AssertionConsumerService的Location:WS-Federation的回调地址,旧MVC应用里应该已经配置过这个路径(通常是/signin-wsfed)- 证书部分:如果应用之前有用于签名的证书,提取其Base64编码填入;没有的话可以生成自签名证书,或者有些AD允许暂时不提供(但不推荐)
方案2:给现有MVC应用启用自动元数据端点(仅改配置)
旧的.NET MVC 2013应用基于WIF,只要在web.config里加几行配置,就能让应用自动生成并暴露元数据端点:
- 先确保
web.config里有WIF的配置节声明(如果没有就加上):
<configSections> <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> </configSections>
- 添加元数据生成配置:
<system.identityModel> <federationConfiguration> <metadata generationEnabled="true" /> </federationConfiguration> </system.identityModel>
- 确保WS-Federation的基础配置正确(替换为新AD的地址):
<system.identityModel.services> <federationConfiguration> <wsFederation passiveRedirectEnabled="true" issuer="https://新AD的地址/adfs/ls/" realm="https://你的应用根域名" reply="https://你的应用根域名/signin-wsfed" requireHttps="true" /> <cookieHandler requireSsl="true" /> </federationConfiguration> </system.identityModel.services>
- 重启IIS或运行应用,访问
https://你的应用根域名/FederationMetadata/2007-06/FederationMetadata.xml,就能获取自动生成的元数据,直接保存即可。
方案3:VS新应用的元数据获取方法
你用VS创建的新WS-Federation应用,元数据不会生成物理文件,而是通过动态端点暴露的:
- 启动应用后,在浏览器访问
https://localhost:你的端口/FederationMetadata/2007-06/FederationMetadata.xml - 把页面里的XML内容复制保存为
FederationMetadata.xml,就能给新AD用了
注意事项:
- 所有URL尽量用HTTPS,AD几乎都要求HTTPS端点
- 如果用自签名证书,需要把证书导入到新AD的信任存储中,否则会验证失败
- 新AD的配置要和你填的
realm、entityID等参数保持一致
内容的提问来源于stack exchange,提问作者Gotham Llianen
相关产品推荐
相关产品推荐

