2016-07-13 25 views
0

Ich verwende IdentityServer3 und habe einen benutzerdefinierten Grant-Flow implementiert, um die Abwärtskompatibilität mit einer vorhandenen SSO-Implementierung zu gewährleisten. Ich verwende Referenztoken für die API-Authentifizierung. Ich habe ITokenHandleStore und auch IUserService implementiert.Token wird beim Abmelden nicht gelöscht

Ich kann mich erfolgreich anmelden und auf meine Anwendung zugreifen. Das Problem ist, dass das Referenz-Token nach dem Abmelden noch gültig ist.

Nach dem Abmelden ich HttpContext.Current.GetOwinContext() aufrufen. Authentication.SignOut(); Ich mache auch einen Aufruf an/connect/endsession? Id_token_hint = mYrEfErEnCeToKeN und gebe das Referenztoken für den Benutzer an den Abfragezeichenfolgenparameter weiter.

Es wird jedoch weder die SignOutAsync-Methode in IUserService noch die RemoveAsync-Methode in ITokenHandleStore aufgerufen. Aus diesem Grund verbleibt das Token in meiner Token-Datenbanktabelle und wird bei nachfolgenden Anforderungen wie ein gültiges Token behandelt, auch wenn der Benutzer abgemeldet wurde.

Wie wird der Benutzer beim Ausführen eines Custom Grant-Ablaufs ordnungsgemäß ausgeloggt? Wie kann ich den Datensatz aus meinem Datenbank-Tokenspeicher löschen? diese

Wenn ich rufe die EndSession von IdentityServer die Protokollierung Endpunkt zeigt:

Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:07:14.835 -04:00 [Information] End access token validation request Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.289 -04:00 [Information] Start end session request Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.349 -04:00 [Information] Start end session request validation Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.412 -04:00 [Information] Start identity token validation Sam.Web.MicroServices.IdentityService.vshost.exe Error: 0 : 2016-07-13 04:09:22.581 -04:00 [Error] Malformed JWT token System.ArgumentException: IDX10709: 'jwtEncodedString' is not well formed: '7dc2417fb752d096af2870c46ca8a181'. The string needs to be in compact JSON format, which is of the form: '..'. at System.IdentityModel.Tokens.JwtSecurityToken..ctor(String jwtEncodedString) in c:\workspace\WilsonForDotNet45Release\src\System.IdentityModel.To kens.Jwt\JwtSecurityToken.cs:line 68 at IdentityServer3.Core.Validation.TokenValidator.GetClientIdFromJwt(String token) in c:\local\identity\server3\Core\source\Core\Validation\TokenVa lidator.cs:line 347 Sam.Web.MicroServices.IdentityService.vshost.exe Error: 0 : 2016-07-13 04:09:22.648 -04:00 [Error] No clientId supplied, can't find id in identity tok en. Sam.Web.MicroServices.IdentityService.vshost.exe Error: 0 : 2016-07-13 04:09:22.701 -04:00 [Error] "Error validating id token hint." "{
\"SubjectId\": \"unknown\", \"Raw\": { \"id_token_hint\": \"7dc2417fb752d096af2870c46ca8a181\" } }" Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.753 -04:00 [Information] Redirecting to logout page Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.872 -04:00 [Information] Logout endpoint submitted Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:22.944 -04:00 [Information] Clearing cookies Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:09:23.013 -04:00 [Information] rendering logged out page

Wenn ich einen Anruf an den/Widerruf Endpunkt der IdentityServer machen protokolliert zeigt diese:

Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:14.822 -04:00 [Information] CORS request made for path: "/connect/r evocation" from origin: "chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop" Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:14.864 -04:00 [Information] AllowedOrigins configured and origin "c hrome-extension://fhbjgbiflinjbdggehcddcbncdddomop" is not allowed Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:14.906 -04:00 [Information] Exiting; origin "chrome-extension://fhb jgbiflinjbdggehcddcbncdddomop" is not allowed Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:14.941 -04:00 [Information] CorsPolicyService did not allow origin Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:15.005 -04:00 [Information] Start token revocation request 2016-07-13 04:11:15.063 -04:00 [Debug] Start client validation 2016-07-13 04:11:15.064 -04:00 [Debug] Start parsing for X.509 certificate 2016-07-13 04:11:15.065 -04:00 [Debug] client_id is not found in post body 2016-07-13 04:11:15.066 -04:00 [Debug] Start parsing for secret in post body 2016-07-13 04:11:15.067 -04:00 [Debug] No secret in post body found 2016-07-13 04:11:15.068 -04:00 [Debug] Start parsing Basic Authentication secret Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:15.069 -04:00 [Information] Parser found no secret Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:15.124 -04:00 [Information] No client secret found Sam.Web.MicroServices.IdentityService.vshost.exe Information: 0 : 2016-07-13 04:11:15.175 -04:00 [Information] Returning error: invalid_client

Antwort

1

Der Grund, warum Sie Beim Abmelden erhalten Sie einen Fehler, weil Sie ein Zugriffs-Token im Parameter id_token_hint zurückgeben. Dieser Parameter erfordert das Identitäts-Token, das Ihnen bei der Anmeldung übergeben wurde (vorausgesetzt, Sie verwenden OpenID Connect).

Wenn Sie nur OAuth verwenden, ist der Endsession-Endpunkt nicht für Sie geeignet. Um das Zugriffstoken zu widerrufen, müssen Sie stattdessen revocation endpoint verwenden. Dadurch wird das Token aus Ihrer Datenbank gelöscht.

Der Fehler, den Sie vom Sperrendpunkt erhalten, scheint mit einem anderen Problem zu tun zu haben (sieht so aus, als würden Sie keine Client-ID und kein Geheimnis angeben).

+0

Ich werde das heute testen und wenn es funktioniert, werde ich diese Antwort akzeptieren. Vielen Dank! – jkruer01