gpt4 book ai didi

c# - ADFS 主动身份验证 .NET 4.5(后 WIF)

转载 作者:太空狗 更新时间:2023-10-29 21:57:54 26 4
gpt4 key购买 nike

我有一个 ASP.NET Web 应用程序(在 .NET 4.5 上运行)。它目前正在进行表单例份验证。我们已经设置了一个具有多个联合的 ADFS 3 服务器,一些是内部的,一些是外部的(客户 STS),我们希望将 Web 应用程序配置为使用主动身份验证模型。如果我理解正确,这意味着我们将继续在我的 Web 应用程序中使用登录表单,它将收集用户的凭据,然后向我们的 ADFS 服务器发送安全 token 请求。 token 请求可能会告诉 ADFS 将请求发送到哪个联盟。如果一切顺利,我会从 ADFS 取回一个 token ,对其进行验证,并构建一个 ClaimsPrinciple 并从那里开始。

现在,在那个背景下,我遇到的问题是如何在 .NET 4.5 中将 token 请求发送到 ADFS。我见过的每个示例,尽管被标记为适用于 .NET 4.5,但都使用 WIF 中的旧 UserNameWSTrustBinding 类。这已被弃用并且不存在于 4.5 中。 Web 搜索“UsernameWSTrustBinding 4.5 equivalent”没有结果。我见过一个人构建他自己的类来复制功能,但我不相信这是必要的。我有一种预感,这里某处有一个类,我应该将其用于 WSTrustChannelFactory 中的绑定(bind),但我找不到它。或者,也许整个 WSTrustChannelFactory 模式也已过时(但为什么它会包含在 .NET 4.5 中)?

谁能提供一段代码,甚至阐明您应该如何在 .NET 4.5 中进行主动身份验证?

最佳答案

到目前为止,我最好的想法是检查用户 cookie 中的用户名(如果存在)或在 cookie 不存在时从常规登录表单检查用户名。有了这些信息,我可以确定是否需要将它发送给 IdP。在需要发送给 IdP 的情况下,我可以构建一个请求 URL 并重定向。

WSFederationAuthenticationModule instance = FederatedAuthentication.WSFederationAuthenticationModule;
SignInRequestMessage request = instance.CreateSignInRequest(Guid.NewGuid().ToString(), instance.Realm, true);
request.AuthenticationType = "urn:federation:authentication:windows";
Response.Redirect(request.WriteQueryString());

当然,我可以使用适当的 .HomeRealm 值或 .AuthenticationType 调整该请求,以跳过 HRD 过程,然后,它们将被发送回经过身份验证并具有适当声明身份的应用程序。

这对我来说不是完美答案的一个原因是,如果用户以前从未登录过,或者禁用了 cookie,并且根据联盟的不同,他们有可能拥有登录两次。也就是说,一次到应用程序的登录表单,一次到 ADFS 表单。这就是为什么我希望能够以某种方式以编程方式发送请求而不是重定向。这样我大概可以发送应用程序已收集的用户名和密码,而无需在 ADFS 再次收集它们。

因此,我不会将其标记为答案。我想坚持得更好。

关于c# - ADFS 主动身份验证 .NET 4.5(后 WIF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com