2016-08-09 151 views
2

Ich habe eine Winforms-App in C# erstellt, um ein Authentifizierungs-Token von ADFS (Windowsmixed) anzufordern, was gut funktioniert, und mir wurde ein Token ausgestellt. Ich benutze WIF/ThinkTecture IdentityModel.Wie kann GenericXmlSecurityToken gespeichert/deserialisiert/serialisiert werden?

Was ist der beste Weg, um das Token lokal zu cachen/speichern und dann das Token erneut zu laden (damit ich dann validieren kann)?

Ich bin ein Token in Form eines GenericXmlSecurityToken-Objekts ausgestellt. Was ist der beste Weg, um dieses in einer Datei zu speichern/zwischenzuspeichern und es dann in ein neues GenericXmlSecurityToken-Objekt neu zu laden/serialisieren?

kann ich die Token-String umwandeln und speichern:

string strToken = ((GenericXmlSecurityToken)genericToken).TokenXml.OuterXml; 

Aber ich bin nicht sicher, wie man wieder Serializer diese Zeichenfolge wieder in GenericXmlSecurityToken oder selbst wenn dies der beste Ansatz ist, (I zusätzliche Sicherheit zu schätzen wissen wird benötigt, wenn das Token auf Festplatte gespeichert wird, das ist eine zukünftige Aufgabe).

Antwort

0

Mit System.IdentityModel können Sie ein GenericXmlSecurityToken in Xml serialisieren. Hier ist ein Beitrag von Shawn Cicoria, der ein Beispiel dafür gibt: https://blogs.msdn.microsoft.com/scicoria/2012/03/22/getting-a-securitytoken-from-a-requestsecuritytokenresponse-in-wif/

Angesichts des serialisierten Tokens müssen Sie einen Weg finden, es zu speichern.

Hinweis: Fügen Sie einen Verweis auf System.IdentityModel und System.IdentityModel.Services hinzu, wenn Sie diese nicht bereits haben.

0

Wenn Sie nur wollen, dass deserialized Token WCF zu initialisieren (ich denke, der Name der Methode ist etwas wie WithIssuedToken erstellen) können Sie einfach constructor of GenericXmlSecurityToken verwenden. Verwenden Sie nur den XmlElement tokenXml Parameter und lassen Sie die anderen als null (oder einige Standardeinstellungen für Datetime-Parameter)

var xmlToken = new GenericXmlSecurityToken(
     tokenXmlElement, 
     null, 
     DateTime.Now, 
     DateTime.Now.AddHours(1), 
     null, 
     null, 
     null); 

Ich sollte anmerken, dass die Instanz-Eigenschaften haben (wie effectiveTime und ExpirationTime), die nicht von den tatsächlichen Werten entsprechen wird das jetzt deserialed SecurityToken (weil Sie sie im Konstruktor manuell festlegen). Aber WCF wird die echten Informationen im Token verwenden, damit es so funktioniert.