Como validar o token SAML do ADFS
Atualmente estou gerando tokens SAML do ADFS como este:
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();
}
}
}
Agora vamos dizer que eu construo uma aplicação web que usa esses tokens para autenticação. Tanto quanto eu sei o fluxo de trabalho deve ser assim:
Gerar tokeno cliente obtém o token gerado (após login válido)Token de caches do clientecliente usa token para o próximo loginaplicativo da web valida token, não precisa chamar o ADFSComo posso validar que o token apresentado pelo cliente é válido? Preciso do certificado do servidor ADFS para descriptografar o token?