2016-09-15 3 views
0

Ich möchte mit Ihnen die Ebenen der Frustration teilen, die ich beim Versuch, ein WSO2-Problem zu beheben, erlebt habe. Ich habe ein System mit Api Manager und Identity Server zusammenarbeiten. Der Api Manager ist für die API verantwortlich und Identity Server ist für die Authentifizierung von Benutzern und Rollen zuständig. Vor dem Zugriff auf eine API empfängt ein Client ein Token von IS und sendet es als Träger an den AM. Dann wird das Token am WSO2-AM-Ende analysiert, und es erreicht die API als JWT (Objekt mit allen Benutzerdaten).WSO2-Identity-Server-Caching nach Rollenwechsel

Es funktioniert gut, bis Sie versuchen, einen Benutzer von einer Rolle zu einer anderen wechseln. In diesem Fall übergibt es aufgrund des Wso2-Caches die alte Rolle noch 15 Minuten an die API, was Probleme verursacht.

Für den ersten Blick ist die Lösung sehr einfach, oder? Aktualisieren Sie entweder den Cache oder deaktivieren Sie den Cache aus den Konfigurationsdateien.

Allerdings nach der Untersuchung der "Rolle ändern" -Prozedur, fand ich, dass das Ändern einer Rolle eine method "removeGatewayKeyCache" aufruft, die das Caching aus dem System entfernen soll. Ich weiß nicht, was es entfernt, aber der Cache war immer noch da nach dem Verfahren. Übrigens bereinigt diese Methode den Cache, selbst wenn der GatewayKeyCache in allen möglichen Konfigurationsdateien auf false gesetzt ist!

Also mein Ansatz, um das Problem anzugehen, war eine Suche nach allen Konfigurationsdateien für das Wort "Cache" zu identifizieren, den Cache, den ich deaktivieren muss. WSO2 AM & haben Dutzende von Konfigurationsdateien, und die meisten von ihnen haben einige "Cache" -Einstellung, einige von ihnen in verschiedenen Dateien dupliziert. Ich habe versucht, alle relevanten zu deaktivieren, dass ich finden konnte, so dass ich auf false all diese:

EnableGatewayKeyCache 
EnableKeyMgtValidationInfoCache 
EnableJWTCache 
EnableOAuthCache 
UserRolesCacheEnabled 
AuthorizationCacheEnabled 
GetAllRolesOfUserEnabled 

Aber JWT Token enthalten noch die alte im Cache gespeicherten Benutzerrolle für 15 Minuten! Und es hat immer noch "removeGatewayKeyCache" aufgerufen und einige Token aus dem Cache entfernt (ich habe es gottverdammt!).

Meine Abhilfe wurde eine carbon.xml Konfiguration öffnen und die DefaultCacheTimeout param auf 0.

<DefaultCacheTimeout>0</DefaultCacheTimeout> 

Dies war der einzige Trick, der gearbeitet werden soll! So, jetzt habe ich ein System ohne Zwischenspeicherung, aber zumindest funktioniert es wie erwartet.

Jeder Vorschlag würde sehr geschätzt werden.

+0

Was ist Ihre APIM-Version? – Bee

+0

Der AM ist 1.10.0, IS - 5.1.0, das apimgt Plugin ist 5.0.3 – yuriscom

Antwort

0

Vergewissern Sie sich, dass Sie EnableKeyMgtValidationInfoCache deaktiviert haben, um JWT-Tokens für jeden Anruf zu generieren, wie in this document erwähnt.

+0

Ja, EnableKeyMgtValidationInfoCache ist ebenfalls auf false gesetzt. Vergessen, es zu erwähnen. Wird es jetzt zum Beitrag hinzufügen. – yuriscom

Verwandte Themen