Asp.net ADFS使用集成身份验证跳过主域发现

Asp.net ADFS使用集成身份验证跳过主域发现,asp.net,active-directory,adfs2.0,Asp.net,Active Directory,Adfs2.0,我的设想: 我有一个.net web应用程序,人们通过表单身份验证登录到该应用程序,我的表单身份验证代码将某些用户发送到ADF进行验证。我有多个联盟,包括我自己的内部用户Active Directory服务器。因此,对于需要发送到ADFS进行身份验证的用户,我会这样做: WSFederationAuthenticationModule instance = FederatedAuthentication.WSFederationAuthenticationModule; SignInReques

我的设想:

我有一个.net web应用程序,人们通过表单身份验证登录到该应用程序,我的表单身份验证代码将某些用户发送到ADF进行验证。我有多个联盟,包括我自己的内部用户Active Directory服务器。因此,对于需要发送到ADFS进行身份验证的用户,我会这样做:

WSFederationAuthenticationModule instance = FederatedAuthentication.WSFederationAuthenticationModule;
SignInRequestMessage request = instance.CreateSignInRequest(Guid.NewGuid().ToString(), instance.Realm, true);
request.AuthenticationType = "urn:federation:authentication:windows";
//maybe you just don't need to specify the homerealm for ad, because there can only be one AD (integrated) trust?
//request.HomeRealm = "I-no-idea-what-to-put-here-for-AD";
Response.Redirect(request.WriteQueryString());
执行此操作时,将设置.HomeRealm属性,该属性在查询字符串上为您填充whr属性。这将使AD FS跳过HRD(主域发现)页面。对于我的大多数联盟(远程STS),我需要在属性中输入什么值是非常清楚的,您可以从HRD页面本身的下拉框中提取值,也可以进入AD FS管理工具并从信任属性中提取值。但是,对于AD信任,下拉列表中没有值(空字符串),您无法转到管理控制台中的属性。所以问题是:如果我想通过whr参数预选AD信任,我应该将HomeRealm属性设置为什么


另外,你会看到这样的评论:“也许你不需要为广告指定homerealm,因为只有一个广告(集成)信任?”我认为可能是这样,但我还没有证明这一点。如果我的猜测是正确的,我将在以后回答这个问题。

根据原始问题中的代码:

    request.AuthenticationType = "urn:federation:authentication:windows";
那句话似乎没有任何效果。此外,不需要指定HomeRealm的希望也是徒劳的。事实上,您必须指定HomeRealm。在搜索google一段时间后,我发现许多语句暗示Active Directory信任与信任ADFS服务器本身是一样的。因此,作为一个在黑暗中的疯狂尝试,我尝试输入ADFS服务器的URI,并且,令我高兴和惊讶的是,这起到了作用

因此,更清楚地说,如果您转到依赖方的web.config,您应该设置类似以下内容:

<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
  <authority name="http://testadfs.test.com/adfs/services/trust">
    <keys>
      <add thumbprint="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
    </keys>
    <validIssuers>
      <add name="http://testadfs.test.com/adfs/services/trust" />
    </validIssuers>
  </authority>
</issuerNameRegistry>

最后,我将request.homearlm的值设置为您在validIssuers和authority元素中看到的值。这使ADFS自动选择Active Directory索赔提供程序信任,达到了预期效果


我应该很清楚,我的ADFS服务器不是域控制器,但它仍然可以工作。

太棒了!这对我帮助很大!