2011-07-11 4 views
1

J'essaie d'implémenter un SecurityToken personnalisé et SecurityTokenHandler pour un STS en utilisant Microsoft.IndentityModel (= Windows Indentity Foundation). Le jeton est sérialisé en un document XML simple avec signature (en utilisant un certificat X509) et est parfois (pas toujours) chiffré (en fonction du domaine cible)Personnalisé SecurityTokenHandler pour WIF

Jusqu'à maintenant, cela a très bien fonctionné, mais je suis resté coincé sur SecurityTokenHandler.CreateSecurityTokenReference(SecurityToken token, bool attached) qui devrait renvoyer un SecurityKeyIndetifierClause.

Ma question est: Qu'est-ce qu'un SecurityKey, SecurityKeyIndentifier et SecurityKeyIndentifierClause en général et pour mon sceanrio (jeton XML signé (et crypté) RSA) en particulier?

Il n'existe pratiquement aucune documentation dans MSDN et je n'ai trouvé aucun autre élément utile sur ce sujet.

Merci d'avance.

P.S .: Je sais que la manière la plus simple et la plus recommandée est d'utiliser une construction au format jeton comme saml, mais le jeton est évalué par un système hérité qui attend un format spécifique sur lequel je n'ai aucune influence.

Répondre

2

En attendant, je trouve des réponses aux questions moi-même:

sécur

Un sécur est utilisé pour les opérations de chiffrement. Cela n'est pas nécessaire pour les implémentations de jeton de support. vous pouvez donc simplement retourner une liste vide dans la propriété correspondante du SecurityToken:

public override ReadOnlyCollection<SecurityKey> SecurityKeys 
{ 
    get { return new List<SecurityKey>().AsReadOnly(); } 
} 

SecurityKeyIdentifierClause

Comme nous l'avons souligné par l'autre réponse un SecurityKeyIdentifierClause est une sorte de l'identifiant unique d'un jeton de sécurité.Il est utilisé par un SecurityTokenResolver pour renvoyer le SecurityToken correspondant pour un SecurityKeyIdentifierClause.

Probablement la meilleure solution pour votre propre SecurityTokenHandler mise en œuvre est de retourner un LocalIdKeyIdentifierClause avec l'identifiant de votre jeton LOCALID paramètre:

public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached) 
{ 
    if (token == null) 
     throw new ArgumentNullException("token"); 

    return new LocalIdKeyIdentifierClause(token.Id); 
} 

SecurityKeyIdentifier

A SecurityKeyIdentifier est une collection de SecurityKeyIdentifierClauses. Lorsque vous en avez besoin, vous pouvez utiliser l'implémentation dans System.IdentityModel.Tokens ici. Il n'y a généralement pas besoin de prendre soin de cela par vous-même.

0

Les identifiants de clé sont utilisés avec des jetons personnalisés pour effectuer certaines opérations. Ils décrivent le jeton, et/ou pointent vers d'autres jetons apparentés (parce que les jetons peuvent juste être des pointeurs - peut-être pour des raisons de performances et autres). si vous n'avez pas besoin identificateur de clé, vous pouvez faire deux choses:

  • Retour faux de CanWriteKeyIdentifierClause:

    public override bool CanWriteKeyIdentifierClause (SecurityKeyIdentifierClause SecurityKeyIdentifierClause) { return false; }

  • Retourner un défaut (ou nulle) de valeur CreateSecurityTokenReference:

    public override SecurityKeyIdentifierClause CreateSecurityTokenReference (jeton de SecurityToken, bool ci-jointe) { défaut de retour (SecurityKeyIdentifierClause); }