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