Wie erzwinge ich eine Aktualisierung des Sicherheitstokens für einen WCF-Dienst?

8

Ich habe einen WCF-Dienst, der ein Sicherheitstoken erfordert, das von einem separaten WCF STS-Dienst ausgegeben wird. Das alles funktioniert nur Dandy. In meiner Anwendung nutze ich den Service wie folgt:

%Vor%

Der STS-Dienst wird aufgerufen, um ein Token abzurufen, und das Token wird verwendet, um die Dienstmethode DoStuff aufzurufen.

Sobald der anfängliche Handshake beendet ist, wird das Token jedoch im Cache-Objekt myService zwischengespeichert und erneut verwendet, bis es abläuft. Das ist gutes Verhalten und alles, aber wie würde ich zwingen es, das Token zu aktualisieren?

%Vor%

Wenn ich DoStuff () erneut anrufe, würde es wissen, dass es wieder so wie beim ersten Mal zur STS gehen muss.

Bin ich stecken nur ein neues Proxy-Klasse-Objekt, d. h. myService = new MyServiceClient(); ? Das funktioniert, aber es scheint wie die Atombombenlösung.

Alternativ gibt es eine Möglichkeit, nur ein neues Token manuell zu erhalten und das aktuelle Token zu ersetzen, d. h. myService.ClientCredentials.Renew(); ?

Wenn ich eine benutzerdefinierte ClientCredentials-Klasse erstellen muss, um dies zu tun, wie würde ich die obigen Beispielmethoden implementieren?

    
Sean Hanley 09.11.2010, 20:55
quelle

2 Antworten

4

In meiner Codebase wird das Token tatsächlich zwischengespeichert, so dass wir sicherstellen, dass wir nicht wiederholt zum STS telefonieren. Mit der gleichen Methode können Sie es definitiv manuell ändern, indem Sie jederzeit ein anderes Token anfordern. Hier erfahren Sie, wie Sie in ClientCredentials einbinden:

%Vor%

Die GetTokenCore () -Methode ist der Ort, an dem der STS aufgerufen wird. Wenn Sie GetToken () aufrufen, wird der STS aufgefordert, ein weiteres Token auszugeben.

Aus Ihrer Frage gehe ich davon aus, dass Sie wissen, wie Sie Ihre clientCredentials aus der app.config einbinden können.

Möglicherweise gibt es eine Möglichkeit, die CacheIssuedTokens-Eigenschaft in der App.config-Datei zu setzen. Ich bin mir nur nicht sicher, ob es wirklich so weit ist.

    
pdalbe01 16.11.2010, 16:23
quelle
1

Können Sie die Eigenschaft IssuedToken.MaxIssuedTokenCachingTime nicht verwenden und auf 0 setzen?

    
Robert MacLean 12.11.2010 07:59
quelle

Tags und Links