J'ai une application qui utilise Windows Identity Foundation pour activer la connexion unique fédérée à partir de plusieurs partenaires (appelons-les Org1, Org2, Org3, etc.). Ma configuration WIF contient donc empreintes de tous les certificats partenaires - la configuration ressemble à ceci (les parties non pertinentes omis par souci de concision):Découvrez quel partenaire fédéré a émis le jeton au format WIF
<system.identityModel>
<identityConfiguration>
<issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry">
<trustedIssuers>
<add name="Org1" thumbprint="...certificate1..." />
<add name="Org2" thumbprint="...certificate2..." />
<add name="Org3" thumbprint="...certificate3..." />
</trustedIssuers>
</issuerNameRegistry>
</identityConfiguration>
Cependant, Je ne comprends pas comment déterminer lequel des certificats a effectivement été utilisé lorsqu'un jeton entrant a été validé. C'est-à-dire, comment puis-je savoir si c'est Org1, Org2 ou Org3 qui m'a envoyé le jeton? À-dire, dans le code suivant:
var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
var request = new HttpRequestWrapper(Request);
if (authModule.CanReadSignInResponse(request, true))
{
var principal = Thread.CurrentPrincipal;
var message = authModule.GetSignInResponseMessage(request);
var token = authModule.GetSecurityToken(request) as SamlSecurityToken;
//???
}
... Comment puis-je utiliser les variables principal
/message
/token
(ou peut-être une autre méthode tout à fait) pour déterminer si elle était Org1, Org2 ou Org3 qui m'a envoyé le jeton? Je sais environ token.Assertion.Issuer
, mais cela semble venir directement du jeton, donc il semble que par exemple. Org1 peut émettre une liste de jetons Org2 en tant qu'émetteur, ce qui entraîne une attaque d'usurpation d'identité. Existe-t-il un moyen d'identifier l'organisation émettrice en toute sécurité, en fonction du certificat utilisé pour la validation du jeton?