Auth-Service für Token-Validierung
In der AWS-Infrastruktur von hermeneus wurde ein Auth-Service implementiert, der die Validierung des Sanctum-Tokens übernimmt. Der Auth-Service ist ein Lambda-Funktion, die über eine API-Gateway-URL aufgerufen wird. Der Auth-Service prüft die Gültigkeit des Tokens und gibt die Nutzerdaten zurück, die im Token enthalten sind.
Anwendungsfall
Ein Service, der nicht Teil der Laravel-Hauptanwendung ist, benötigt die Nutzerdaten, die im Sanctum-Token enthalten sind. Der Service kann den Auth-Service aufrufen, um die Nutzerdaten zu erhalten und um Berechtigungen zu prüfen. Der klassische Anwendungsfall war zunächst die Sichtbeschränkung von Teilen der Dokumentation auf bestimmte Benutzerrollen.
Funktionsweise
- Beim Login auf www.hermeneus.eu wird ein Sanctum-Token generiert und im Browser als unverschlüsseltes Cookie gespeichert. Obacht: Bei diesem plainTextToken wird nur der zweite Teil des Tokens, der die Nutzerdaten enthält, im Cookie gespeichert. Der erste Teil des Tokens, der die Signatur enthält, wird nicht im Cookie gespeichert.
- Der Service, der die Nutzerdaten benötigt, sendet einen HTTP-Request an die API-Gateway-URL des Auth-Services. Der HTTP-Request muss den Sanctum-Token als Cookie-Header enthalten. Obacht: Der Service muss die Top-Level-Domain hermeneus.eu verwenden, um das Cookie zu senden.
- Die API-Gateway sendet das Cookie weiter an eine Lambda-Funktion. Diese hashed das Cookie, greift auf die hermeneus-Datenbank zu und prüft die Gültigkeit des Tokens.
- Wenn das Token gültig ist, gibt die Lambda-Funktion die Nutzerdaten zurück, die im Token enthalten sind. Wenn das Token ungültig ist, gibt die Lambda-Funktion einen Fehler zurück.
- Die Antwort enthält ein JSON-Objekt mit folgenden Eigenschaften:
valid: Gültigkeit des Tokens. Mögliche Werte sindtrueoderfalse.user_id: Die ID des Nutzers.role: Die Rolle des Nutzers.expires_at: Das Ablaufdatum des Tokens.
Aufruf des Auth-Service in JavaScript
Der Auth-Service kann in JavaScript aufgerufen werden, indem ein HTTP-Request an die API-Gateway-URL des Auth-Services gesendet wird. Der HTTP-Request muss den Sanctum-Token als Cookie-Header enthalten.
async function validateToken() {
const response = await axios.post('https://auth.hermeneus.eu/validate-token', {}, {
withCredentials: true, headers: {
'Content-Type': 'application/json',
}
});
return response.data
}Die Informationen der Validierung können dann weiterverarbeitet werden. Beispiel:
const validation = await validateToken()
if (validation.valid) {
isAuthenticated.value = true
userRole.value = validation.role
} else {
isAuthenticated.value = false
userRole.value = null
}
// Regelung von Berechtigungen und Beschränkungen ...