【发布时间】:2013-09-09 15:23:49
【问题描述】:
我目前正在像这样从 ADFS 生成 SAML 令牌:
WSTrustChannelFactory factory = null;
try
{
// use a UserName Trust Binding for username authentication
factory = new WSTrustChannelFactory(
new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
new EndpointAddress("https://adfs.company.com/adfs/services/trust/13/usernamemixed"));
factory.TrustVersion = TrustVersion.WSTrust13;
factory.Credentials.UserName.UserName = "user";
factory.Credentials.UserName.Password = "pw";
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
AppliesTo = new EndpointReference(relyingPartyId),
KeyType = KeyTypes.Bearer
};
IWSTrustChannelContract channel = factory.CreateChannel();
GenericXmlSecurityToken genericToken = channel.Issue(rst)
as GenericXmlSecurityToken;
}
finally
{
if (factory != null)
{
try
{
factory.Close();
}
catch (CommunicationObjectFaultedException)
{
factory.Abort();
}
}
}
现在假设我构建了一个使用这些令牌进行身份验证的 Web 应用程序。据我所知,工作流程应该是这样的:
- 生成令牌
- 客户端获取生成的令牌(有效登录后)
- 客户端缓存令牌
- 客户端使用令牌进行下次登录
- Web 应用程序验证令牌,不必调用 ADFS
如何验证客户端提供的令牌是否有效?我需要 ADFS 服务器的证书来解密令牌吗?
【问题讨论】:
-
不过,我总是可以将令牌保存到数据库中......
标签: c# validation saml adfs