In JBoss EAP 8 holst du den aktuellen EJB-Caller über EJBContext bzw. SessionContext mit getCallerPrincipal(); das ist der Standardweg. Laut Jakarta EJB liefert diese Methode ein java.security.Pr...
Warum zeigt JBoss 8 bei SecurityAuthenticationFailedEvent in der Security Identity „Anonymous“, obwohl als Principal der richtige Benutzer steht?
Antwort vom**Nein: Wenn in JBoss EAP 8 bzw. Elytron im `SecurityAuthenticationFailedEvent` die `SecurityIdentity` auf `Anonymous` steht, ist die Anmeldung aus Sicht des Security-Domains fehlgeschlagen oder noch nicht erfolgreich abgeschlossen – auch wenn im separaten `Principal` bereits der richtige Benutzername steht.** Der entscheidende Punkt ist: In diesem Event sind `securityIdentity` und `principal` nicht dasselbe. Der `principal` ist oft nur der angegebene Login-Name, die `SecurityIdentity` ist erst dann der echte angemeldete Benutzer, wenn Authentifizierung **und** Autorisierung erfolgreich abgeschlossen wurden. ([wildfly-security.github.io](https://wildfly-security.github.io/wildfly-elytron/documentation/api/next/org/wildfly/security/auth/server/event/SecurityAuthenticationFailedEvent.html)) ## Was das konkret bedeutet `SecurityAuthenticationFailedEvent` wird von Elytron genau für fehlgeschlagene Authentifizierungen verwendet. Die API zeigt auch schon an der Signatur, dass das Event zwei getrennte Informationen trägt: eine `SecurityIdentity` und einen `Principal`. Dass der `Principal` korrekt ist, beweist nur, dass der Benutzername erkannt oder übergeben wurde – nicht, dass daraus eine gültige Identity aufgebaut wurde. ([wildfly-security.github.io](https://wildfly-security.github.io/wildfly-elytron/documentation/api/next/org/wildfly/security/auth/server/event/SecurityAuthenticationFailedEvent.html)) Wenn die `SecurityIdentity` dabei `Anonymous` ist, heißt das praktisch: Elytron hat für diesen Versuch keine authentifizierte Identity etabliert. Das ist der relevante Zustand, nicht der Name im `Principal`. ([docs.wildfly.org](https://docs.wildfly.org/28/WildFly_Elytron_Security.html)) ## Typische Ursache des Missverständnisses Viele verwechseln in Elytron diese drei Stufen: 1. **Benutzername empfangen** → `Principal` ist gesetzt 2. **Credentials geprüft** → Passwort, Token oder Zertifikat wurde validiert 3. **Identity aufgebaut und autorisiert** → erst dann ist die `SecurityIdentity` nicht mehr anonym Genau deshalb ist dein Befund nicht widersprüchlich, sondern typisch für einen Fehler **nach** der Namensauflösung, aber **vor** erfolgreicher vollständiger Anmeldung. Das kann z. B. an falschen Credentials, fehlender Realm-Zuordnung, Principal-Transformationen oder einer gescheiterten Autorisierung liegen. Die Elytron-Dokumentation beschreibt ausdrücklich, dass ohne etablierte authentifizierte Identity auf die anonyme Identity zurückgefallen wird. ([docs.wildfly.org](https://docs.wildfly.org/28/WildFly_Elytron_Security.html)) ## Wahrscheinlichste Ursachen in JBoss 8 / Elytron Am häufigsten steckt eines dieser Probleme dahinter: - **Passwort oder Evidence ungültig** - **Benutzer im Realm gefunden, aber nicht erfolgreich autorisiert** - **falscher Realm oder falsches Security-Domain-Mapping** - **Principal-Transformer verändert den Namen, sodass Lookup und Autorisierung nicht mehr zusammenpassen** - **Mechanismus liefert einen Namen, aber keine erfolgreiche Authentifizierung** Gerade der letzte Punkt erklärt dein Symptom sehr gut: Der Login-Mechanismus kennt den Benutzernamen bereits, aber Elytron hat daraus noch keine gültige `SecurityIdentity` gemacht. ([docs.wildfly.org](https://docs.wildfly.org/28/WildFly_Elytron_Security.html)) ## Der praktische Prüfpunkt Wenn du Logs oder Listener auswertest, dann gilt: - **`event.getPrincipal()`** = „Mit welchem Namen wurde der Login versucht?“ - **`event.getSecurityIdentity()`** = „Welche Identity ist am Ende tatsächlich aktiv?“ Für die Fehleranalyse ist bei einem `SecurityAuthenticationFailedEvent` die `SecurityIdentity = Anonymous` also **kein Nebenbefund**, sondern die Kernaussage: **Der Benutzername war bekannt, die Anmeldung aber nicht erfolgreich.** ([wildfly-security.github.io](https://wildfly-security.github.io/wildfly-elytron/documentation/api/next/org/wildfly/security/auth/server/event/SecurityAuthenticationFailedEvent.html)) ## Wichtiger Unterschied, den viele übersehen Der richtige Benutzername im Event ist **kein Beweis für erfolgreiche Authentifizierung**. Er ist nur der Input des Versuchs. Anders gesagt: **`Principal = hans` + `SecurityIdentity = Anonymous` bedeutet nicht „hans ist eingeloggt“, sondern „Login-Versuch für hans ist fehlgeschlagen“.** ([wildfly-security.github.io](https://wildfly-security.github.io/wildfly-elytron/documentation/api/next/org/wildfly/security/auth/server/event/SecurityAuthenticationFailedEvent.html)) Wenn man es hart formuliert: Für die Sicherheitsbewertung zählt die `SecurityIdentity`, nicht der bloße `Principal`-Name.