如何在ASP.NET中查询ADFS存储库进行身份验证

如何在ASP.NET中查询ADFS存储库进行身份验证,asp.net,authentication,webforms,adfs,Asp.net,Authentication,Webforms,Adfs,我有一个ASP.NET Web窗体应用程序和正确实现的ADFS 我在许多应用程序中成功地将ADFS用于SSO,但现在我需要使用ADFS存储库来验证本地登录凭据,而不是登录本身 我的应用程序是一个简单的表单,包含用户名和密码的文本框以及一个登录按钮。一旦用户插入用户名和密码并单击登录,我需要使用ADFS检查数据是否正确,接收响应并基于此执行其他任务 在我已经实现的SSO中,显示登录凭据弹出窗口的是STS本身,但在这种情况下,我希望我的应用程序能够完成此任务 任何人都可以告诉我这是否可行,并为我指出

我有一个ASP.NET Web窗体应用程序和正确实现的ADFS

我在许多应用程序中成功地将ADFS用于SSO,但现在我需要使用ADFS存储库来验证本地登录凭据,而不是登录本身

我的应用程序是一个简单的表单,包含用户名和密码的文本框以及一个登录按钮。一旦用户插入用户名和密码并单击登录,我需要使用ADFS检查数据是否正确,接收响应并基于此执行其他任务

在我已经实现的SSO中,显示登录凭据弹出窗口的是STS本身,但在这种情况下,我希望我的应用程序能够完成此任务


任何人都可以告诉我这是否可行,并为我指出正确的方向?

你确定要在web应用程序中使用自己的登录表单吗?这听起来不公平,如果ADFS与其他身份提供者进一步联合,您的检查可能会错过这一点

话虽如此,如果您确实想要这样做,您应该在ADFS配置中启用
usernamemix
端点,将您的应用程序配置为依赖方并请求令牌:

string stsEndpoint = "https://WIN-2013.win2008.marz.com/adfs/services/trust/13/usernamemixed";
string relyingPartyUri = "https://www.yourrelyingpartyuri.com";

WSTrustChannelFactory factory = new WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
new EndpointAddress(stsEndpoint));

factory.TrustVersion = TrustVersion.WSTrust13;

// Username and Password here...
factory.Credentials.UserName.UserName = "remote_user01";
factory.Credentials.UserName.Password = "the_password";

RequestSecurityToken rst = new RequestSecurityToken
{
   RequestType = Microsoft.IdentityModel.Protocols.WSTrust.WSTrust13Constants.RequestTypes.Issue,
   AppliesTo = new EndpointAddress(relyingPartyUri),
   KeyType = Microsoft.IdentityModel.Protocols.WSTrust.WSTrust13Constants.KeyTypes.Bearer,
};

IWSTrustChannelContract channel = factory.CreateChannel();

SecurityToken token = channel.Issue(rst);

//if authentication is failed, exception will be thrown. Error is inside the innerexception.
//Console.WriteLine("Token Id: " + token.Id);
此特定代码段是从此博客条目复制的:


谢谢您的回复!关于您关于在web应用程序中实现登录的评论,我将更好地解释我的场景。我有一个基于云的web应用程序,它提供了实现SSO的机会,但它不使用ADFS,这是我用来存储用户数据的存储库。因此,他们无法在我的STS端点中直接重定向请求。为了验证登录,需要将响应重定向到一个桥接web应用程序,即我正在构建的应用程序,然后使用ADFS验证我的域内的登录,并最终将SSO令牌发送到请求的web应用:)另一种设置环境的方法是使用联邦主动身份验证保护WCF服务。这样,调用服务将需要传递用户名/密码对,联邦绑定将自动转到ADFS以代表用户获取令牌。此流程的一个优点是,用户询问应用程序的Web服务,然后Web服务自行询问ADF。用户从不直接联系ADF。可以根据文档设置活动WCF联邦绑定。是的,您的解决方案确实是最符合逻辑的,但提供基于云的移动应用程序的第三方不提供与WS通信的可能性,他们明确要求web应用程序。实际上,它基本上充当WS,但我无法控制;-)