问题:在 Visual Studio 2013 年创建 AD FS 声明感知应用程序
Issue: creating AD FS claims aware application in Visual Studio 2013
我刚开始尝试使用 AD FS,我已经 运行 熟悉了。
- 正在尝试制作声明感知应用程序
- 组织处理自己的身份验证
我已经让我的测试应用程序验证身份验证,但它似乎不对。
- 在 Visual Studio
中创建新应用程序
- 选择网络 -> Visual Studio
- 选择 .Net Framework 4.5
- Select ASP.Net MVC 4 网络应用程序
- 添加对 System.Identity
的引用
- 添加对 System.Identity.Services
的引用
- 编辑我的 web.Config 文件
- 在配置部分 -- 添加以下内容
<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" />
- 然后添加
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="ida:FederationMetadataLocation" value="https://fedtest.xxxxxxxx.com/FederationMetadata/2007-06/FederationMetadata.xml" />
<add key="ida:Realm" value="https://myappNameHere.xxxxxx.com" />
<add key="ida:AudienceUri" value="http://myappNameHere.xxxxxxx.com" />
<add key="loginUrl" value="~/Home" />
</appSettings>
- 然后添加
<location path="Home">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="Logout.html">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
- 然后添加
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authorization>
<deny users="?" />
</authorization>
<authentication mode="None" />
</system.web>
- 然后添加
<identityConfiguration>
<audienceUris>
<add value="http://myappName.xxxxxx.com/" />
</audienceUris>`
<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
<authority name="http://fedtest.xxxxxxx.com/adfs/services/trust">
<keys>
<add thumbprint="12345567890asdasfsdgdfhdfgjdf123124" />
</keys>
<validIssuers>
<add name="http://fedtest.xxxxxxxx.com/adfs/services/trust" />
</validIssuers>
</authority>
</issuerNameRegistry>
<securityTokenHandlers>
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
<certificateValidation certificateValidationMode="None" />
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="true" />
<wsFederation passiveRedirectEnabled="true"
issuer="https://fedtest.xxxxxxxxx.com/adfs/ls/"
realm="https://myappName.xxxxxxxx.com/"
reply="https://myappName.xxxxxxxxx.com/"
requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
为什么我认为这一切都是错误的??好吧,我从以下步骤中得到了 web.config 的所有行...
- 返回第 5 步并执行以下操作
- 在 Tempalte 下点击 web
- 选择了唯一的选项 --- ASP.NET Web 应用程序
- 向导出现并单击 'change Authentication'
- 选择组织帐户
- 将下拉列表更改为 'On Premises'
- 填写'On-Premises Authority'
- 填写'App ID URI'
- 看看web.config
但是使用这些步骤生成的应用程序会创建一个重定向循环,我从来没有解决过这个问题。
所以 -- 关于我做错了什么的建议。不能认为以标准方式生成 web.config 并将其粘贴到以前的版本中以使其工作是正确的。
参考:Use the On-Premises Organizational Authentication Option (ADFS) With ASP.NET in Visual Studio 2013.
在重定向循环方面。通常的原因是,对于您的 ADFS RP,您配置的端点没有尾部斜杠。
添加缺失的“/”并确保它与您的 web.config.
中的字符串匹配
在您的应用程序中启用 SSL 并将 SSL URL 设置为您的网络媒体资源中的默认值。
好的——最后的答案是……
1) 我开始走这条路是因为我不断收到我认为是由 web.config.
引起的重定向循环
这不是 web.config。
2) 因此,按照您在 VS 13 中应该创建的方式创建应用程序——即转到 c# -> web -> 然后单击 ASP.NET Web 应用程序并设置内部身份验证
3) 我的重定向循环是由来自 AD FS
的多个 LDAP 声明捆绑在一起引起的
4) 一次发送一条规则并像魔术一样工作。
如果有人能阐明为什么这是真的,我很好奇。
我刚开始尝试使用 AD FS,我已经 运行 熟悉了。
- 正在尝试制作声明感知应用程序
- 组织处理自己的身份验证
我已经让我的测试应用程序验证身份验证,但它似乎不对。
- 在 Visual Studio 中创建新应用程序
- 选择网络 -> Visual Studio
- 选择 .Net Framework 4.5
- Select ASP.Net MVC 4 网络应用程序
- 添加对 System.Identity 的引用
- 添加对 System.Identity.Services 的引用
- 编辑我的 web.Config 文件
- 在配置部分 -- 添加以下内容
<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" />
- 然后添加
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="ida:FederationMetadataLocation" value="https://fedtest.xxxxxxxx.com/FederationMetadata/2007-06/FederationMetadata.xml" />
<add key="ida:Realm" value="https://myappNameHere.xxxxxx.com" />
<add key="ida:AudienceUri" value="http://myappNameHere.xxxxxxx.com" />
<add key="loginUrl" value="~/Home" />
</appSettings>
- 然后添加
<location path="Home">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="Logout.html">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
- 然后添加
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authorization>
<deny users="?" />
</authorization>
<authentication mode="None" />
</system.web>
- 然后添加
<identityConfiguration>
<audienceUris>
<add value="http://myappName.xxxxxx.com/" />
</audienceUris>`
<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
<authority name="http://fedtest.xxxxxxx.com/adfs/services/trust">
<keys>
<add thumbprint="12345567890asdasfsdgdfhdfgjdf123124" />
</keys>
<validIssuers>
<add name="http://fedtest.xxxxxxxx.com/adfs/services/trust" />
</validIssuers>
</authority>
</issuerNameRegistry>
<securityTokenHandlers>
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
<certificateValidation certificateValidationMode="None" />
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="true" />
<wsFederation passiveRedirectEnabled="true"
issuer="https://fedtest.xxxxxxxxx.com/adfs/ls/"
realm="https://myappName.xxxxxxxx.com/"
reply="https://myappName.xxxxxxxxx.com/"
requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
为什么我认为这一切都是错误的??好吧,我从以下步骤中得到了 web.config 的所有行...
- 返回第 5 步并执行以下操作
- 在 Tempalte 下点击 web
- 选择了唯一的选项 --- ASP.NET Web 应用程序
- 向导出现并单击 'change Authentication'
- 选择组织帐户
- 将下拉列表更改为 'On Premises'
- 填写'On-Premises Authority'
- 填写'App ID URI'
- 看看web.config
但是使用这些步骤生成的应用程序会创建一个重定向循环,我从来没有解决过这个问题。
所以 -- 关于我做错了什么的建议。不能认为以标准方式生成 web.config 并将其粘贴到以前的版本中以使其工作是正确的。
参考:Use the On-Premises Organizational Authentication Option (ADFS) With ASP.NET in Visual Studio 2013.
在重定向循环方面。通常的原因是,对于您的 ADFS RP,您配置的端点没有尾部斜杠。
添加缺失的“/”并确保它与您的 web.config.
中的字符串匹配在您的应用程序中启用 SSL 并将 SSL URL 设置为您的网络媒体资源中的默认值。
好的——最后的答案是……
1) 我开始走这条路是因为我不断收到我认为是由 web.config.
引起的重定向循环这不是 web.config。
2) 因此,按照您在 VS 13 中应该创建的方式创建应用程序——即转到 c# -> web -> 然后单击 ASP.NET Web 应用程序并设置内部身份验证
3) 我的重定向循环是由来自 AD FS
的多个 LDAP 声明捆绑在一起引起的4) 一次发送一条规则并像魔术一样工作。
如果有人能阐明为什么这是真的,我很好奇。