1

我已经尝试搜索这个并且找不到任何东西。

我希望用户拥有真正的 SSO 体验。这意味着他们登录到他们的计算机,当他们点击我们在 ADFS 中建立信任的网络应用程序时,他们会直接进入该网站。现在无论他们被带到 ADFS 表单登录页面。如果用户尚未连接到网络,我们只希望显示表单登录页面。否则,ADFS 应识别用户在网络上并使用 Windows 身份验证。

为了实现这一点,我必须在 ADFS 中进行哪些更改?

4

2 回答 2

2

在 ADFS web.config 中,您有什么顺序:

<localAuthenticationTypes>
    <add name="Integrated" page="auth/integrated/" />      
      <add name="Forms" page="FormsSignIn.aspx" />
      <add name="TlsClient" page="auth/sslclient/" />
      <add name="Basic" page="auth/basic/" />
</localAuthenticationTypes>

表格在上面吗?

这些用户是在 Internet 上还是在 Intranet 上?

您使用 ADFS 代理吗?

于 2012-11-20T19:11:32.060 回答
0

一种选择是为 RedirectingToIdentityProvider 事件添加一个处理程序,方法是将代码放在 global.asax 中本段的正下方。这使您有机会在浏览器重定向到 ADFS 之前跳入并修改请求(查询字符串)的外观。您可以执行此操作来指定身份验证类型或主域(如果您有多个联盟并且想要跳过 HRD),以及可能还有很多我不知道的其他内容。

void Application_Init()
    {
        FederatedAuthentication.WSFederationAuthenticationModule.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(WSFederationAuthentication_RedirectingToIdentityProvider);
    }

然后你会向你的处理程序添加代码,看起来像这样:

void WSFederationAuthentication_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
WSFederationAuthenticationModule instance = FederatedAuthentication.WSFederationAuthenticationModule;
SignInRequestMessage request = instance.CreateSignInRequest(Guid.NewGuid().ToString(), instance.Realm, true);
request.AuthenticationType = "urn:federation:authentication:windows";
Response.Redirect(request.WriteQueryString());
}

当您将 request.AuthenticationType 设置为该值时,您就是在告诉 ADFS 您想要进行 Windows(集成)身份验证。这就是我让它工作所需要的一切。我不必像 nzpcmad 建议的那样费心在 web.config 中切换身份验证类型的顺序。

此外,为了使其正常工作,IIS 和您的 Web 浏览器在 AD FS 和您的依赖方之外发挥了一些作用,因此在 IE 中,您的用户必须转到工具 > Internet 选项 > 安全并将站点添加到您的本地 Intranet 站点。可能有一种方法可以通过组策略或其他方式来解决这个问题,但这是另一个问题。无论如何,现在我想起来了,这可能是您唯一缺少的步骤。

于 2014-03-17T17:36:38.463 回答