Comment valider ADFS jeton SAML
Je suis actuellement en train de générer des jetons SAML de ADFS comme ceci:
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();
}
}
}
Maintenant, nous allons dire que j'ai créer une application web qui utilise ces jetons pour l'authentification. Autant que je sache, le flux de travail devrait être comme ceci:
- Générer un jeton
- client obtient le jeton généré (après ouverture de session valides)
- client caches jeton
- client utilise un jeton pour la prochaine connexion
- application web valide jeton, n'appelle pas ADFS
Comment puis-je valider que le jeton le client présente est-elle valable? Ai-je besoin du certificat du serveur ADFS pour décrypter le jeton?
J'ai toujours pu enregistrer le jeton à un DB, mais...
OriginalL'auteur hoetz | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Après avoir regardé l'excellent thinktecture identité du serveur de code ( https://github.com/thinktecture/Thinktecture.IdentityServer.v2/tree/master/src/Libraries/Thinktecture.IdentityServer.Protocols/AdfsIntegration ), j'ai extrait la solution:
Était-ce le certificat de signature de jeton de ADFS vous avez besoin de stocker localement à utiliser pour décrypter/lire le jeton?
OriginalL'auteur hoetz
C'est beaucoup plus simple! Pour les sites web que vous utilisez WIF (en supposant que vous utilisez .NET) et puis vous fédérer l'application avec ADFS. (Il y a un assistant inclus dans le WIF SDK). Tout est pris en charge. L'analyse, validation, etc. est fait par le cadre. Votre application serait de traiter avec les utilisateurs de la façon habituelle:
this.User.Name
,this.User.IsInRole("admin")
, etc.Le scénario est documenté ici.
Dépend de la personne qui appelle l'API et comment l'API est mis en œuvre. Pour le SAVON, vous pouvez utiliser SAML et un appel similaire à votre exemple. Pour le RESTE des services que vous ne serait pas souvent utiliser SAML, mais quelque chose de plus léger.Ce serait super si vous élargi sur l'ensemble du scénario.
OriginalL'auteur Eugenio Pace