it-at-m / BayernID-Plugin

Plugin für Keycloak (RH-SSO) zur Anbindung der BayernID über den Brokering-Mechanismus

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

KeyCloak (RedHat SSO) BayernID Plugin

Bauen

mvn clean install

Deployen

Entweder:

  • KeyCloak/RH-SSO muss laufen
  • Folgendes ausführen
mvn wildfly:deploy

Oder:

Die Datei bayernid-plugin-[VERSION].jar aus dem Verzeichnis target (existiert nach dem Build-Prozess) in das KeyCloak-Verzeichnis standalone/deployments kopieren. Erst danach den KeyCloak/RH-SSO starten.

Konfigurieren

Siehe Dokument KeyCloak-Konfiguration.pdf

Testen

Je nachdem, ob das Plugin per SAML2-Client oder OIDC-Client aufgerufen wird, verhält es sich unterschiedlich (z.B. hinsichtlich des angeforderten Authentifizierungsniveaus), so dass beides getestet werden sollte.

OIDC

Für einen OIDC-Test kann grundsätzlich die Account-Anwendung verwendet werden. Diese ist folgendermaßen zu erreichen: https://<basis-URL-inkl-Realm>/account

Falls das Bürgerkonto als Default-Provider konfiguriert ist (unter Authentication->Identity Provider Redirector->Actions->Config->Default eintragen, z.B. "buergerkonto"), kommt man sofort zur Login-Maske des Bürgerkontos bei der AKDB, an sonsten kommt die Login-Maske des Keycloak/RH-SSO, in der man dann "buergerkonto", "Bayern-ID" o.ä. anklickt (nicht direkt einloggen).

Bei OIDC kann man per Anforderung von Scopes ein höheres Authentifizierungsniveau anfordern. Das funktioniert über die Angabe der folgenden Scopes

  • level1: mindestes Username+Passwort
  • level2: [derzeit nicht belegt]
  • level3: mindestens Authega
  • level4: nPA mit eID

Außerdem gibt es noch die folgenden Scopes in Verbindung mit dem ELSTER Unternehmenskonto (NEZO):

  • any oder (keine explizite Angabe): sowohl Bürgerkonto als auch Unternehmenskonto sind für den Login möglich (falls BayernID und NEZO als Broker konfiguriert sind, erscheinen beide IDPs aus Auswahlmöglichkeit im Keycloak Loginscreen)
  • legalEntity: nur Unternehmenskonto ist für den Login möglich
  • person: nur Login mit Bürgerkonto ist möglich

Die Scopes zum Authentifizierungsniveau und zum Unternehmenskonto sind kombinierbar.

Zudem gibt es noch den Scope debug. Wenn dieser zusätzlich gesetzt wird, werden SAML Request und Response im Logfile ausgegeben.

Außerdem können natürlich die weiteren definierten und als optional im Client konfigurierten Client Scopes angefordert werden, um die darin enthaltenen Attribute zu erhalten (z.B. profile, email oder birthdate).

Das BayernID-Plugin ist derzeit so konfiguriert, dass nur die BayernID-eigenen Authentifizierungsmethoden eID, Authega, ELSTER und Benutzername+Passwort aktiv sind, d.h. die anderen Methoden wie temporär Login und Servicekonten (anderer Bundesländer / NutzerkontoBund oder anderer europäischer Staaten) sind standardmäßig deaktiviert. Der Grund ist, dass die bei den Servicekonten übertragenen Attribute sehr unterschiedlich sind, so dass man u.U. Schwierigkeiten mit der sauberen Verarbeitung im nachgelagerten Fachverfahren bekommt. Man kann aber explizit die anderen Authentifizierungsmethoden erzwingen über den Scope otherOptions.

Ein Test der beschriebenen Scopes kann wie folgt vorgenommen werden:

Schritt 1: Auth Endpoint aufrufen (im Browser):

http://<basis-URL-inkl-Realm>/protocol/openid-connect/auth?response_type=code&client_id=eogov&redirect_uri=https://www.muenchen.de&scope=level3+legalEntity+openid

In diesem Beispiel sollten dann nur noch Authega und nPA zur Auswahl stehen. Login durchführen.

Schritt 2: Muenchen.de wird aufgerufen, sieht in etwa so aus:

https://www.muenchen.de/?session_state=32fca3d2-b398-4be7-9991-43ba9aba8159&code=[code]

Code entnehmen

Schritt 3: Token Endpoint per RESTClient aufrufen (mit Code von oben) und Access-Token besorgen

POST
http://<basis-URL-inkl-Realm>/protocol/openid-connect/token
client_id=eogov&client_secret=<secret>&grant_type=authorization_code&code=<code>

SAML2

Per SAML2 angebundene Clients müssen die Konfiguration, die bei OIDC per Scopes gesteuert wird, stattdessen im SAML-Request mitschicken. Bspw. wie folgt:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="Login" Version="2.0" IssueInstant="2012-01-01T00:00:00Z">
    <samlp:Extensions>
        <bayernid:RequestedAttributeSet xmlns:bayernid="urn:bayernid:1.0">person</bayernid:RequestedAttributeSet>
        <akdb:AuthenticationRequest xmlns:akdb="https://www.akdb.de/request/2018/09">
            <akdb:AuthnMethods>
                <akdb:eID>
                    <akdb:Enabled>true</akdb:Enabled>
                </akdb:eID>
                <akdb:Elster>
                    <akdb:Enabled>true</akdb:Enabled>
                </akdb:Elster>
            </akdb:AuthnMethods>
            <akdb:RequestedAttributes>
                <!--gender-->
                <akdb:RequestedAttribute Name="urn:oid:1.3.6.1.4.1.33592.1.3.5"/>
                <!--givenName / Vorname-->
                <akdb:RequestedAttribute Name="urn:oid:2.5.4.42" RequiredAttribute="false"/>
                <!--surname / Nachname-->
                <akdb:RequestedAttribute Name="urn:oid:2.5.4.4" RequiredAttribute="true"/>
                <!--bPK2-->
                <akdb:RequestedAttribute Name="urn:oid:1.3.6.1.4.1.25484.494450.3" RequiredAttribute="true"/>
                <!--authlevel-->
                <akdb:RequestedAttribute Name="urn:oid:1.2.40.0.10.2.1.1.261.94" RequiredAttribute="true"/>
                <!--birthdate / Geburtsdatum - Scope birthdate -->
                <akdb:RequestedAttribute Name="urn:oid:1.2.40.0.10.2.1.1.55" RequiredAttribute="true"/>
            </akdb:RequestedAttributes>
        </akdb:AuthenticationRequest>
        <lhm:otherOptions xmlns:lhm="urn:lhm:1.0">true</lhm:otherOptions>
        <lhm:idpHint xmlns:lhm="urn:lhm:1.0">buergerkonto</lhm:idpHint>
        <lhm:RequestedScopes xmlns:lhm="https://www.muenchen.de/request/2022/03">
            <lhm:Scope>email</lhm:Scope>
            <lhm:Scope>debug</lhm:Scope>
        </lhm:RequestedScopes>
    </samlp:Extensions>
    <samlp:RequestedAuthnContext Comparison="minimum" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
        <saml:AuthnContextClassRef>STORK-QAA-Level-3</saml:AuthnContextClassRef>
    </samlp:RequestedAuthnContext>
</samlp:AuthnRequest>

Dabei gibt es folgende Möglichkeiten:

  • bayernid:RequestedAttributeSet (im Bereich Extensions): any, legalEntity oder person (s. OIDC für Beschreibung)
  • lhm:otherOptions (im Bereich Extensions): Explizites Hinzukonfigurieren der weiteren Authentifizierungsmethoden bei der BayernID wie FINK (aber keine temporären Logins)
  • lhm:idpHint (im Bereich Extensions): Durch Angabe eines Broker-Alias kann die Keylcoak-Loginseite übersprungen und direkt zum entsprechenden externen IDP (z.B. BayernID oder NEZO) weitergeleitet werden.
  • lhm:RequestedScopes (im Bereich Extensions): Angabe der explizit gewünschten Scopes, die bei der BayernID angefordert werden sollen. Falls keine explizite Angabe erfolgt, werden alle im zugehörigen SAML-Client definierten Client Scopes bei der BayernID angefordert.
    In der Schlussfolgerung werden auch nur die Attribute im SAML-Response geliefert, die in den angeforderten Scopes definiert sind (weitere Attribute wurden ja gar nicht von der BayernID eingeholt).
  • akdb:AuthnMethods (im Bereich Extension im Unterbereich akdb:AuthenticationRequest): Hier können explizit die Anmeldeoptionen der BayernID angegeben werden, die bei diesem Request aktiv sein sollen,
    bspw. Benutzername, eID oder Elster, aber da die Anfrage direkt an die BayernID durchgereicht wird, sind auch alle weiteren derzeit oder künftig verfügbaren Anmeldeoptionen möglich.
  • akdb:RequestedAttributes (im Bereich Extension im Unterbereich akdb:AuthenticationRequest): Aus Gründen der Schnittstellenkompatibilität zur BayernID ist es über diesen Parameter zusätzlich zu den o.g. RequestedScopes möglich, direkt einzelne Attribute von der BayernID anzufordern. Es wird aber dringend empfohlen, stattdessen wenn möglich die RequestedScopes zu nutzen oder an sonsten alle Attribute anzufordern, die einen Scope vollständig abdecken, da es sonst zu ungewollten Effekten im SSO-bedingten Wechsel zwischen verschiedenen Anwendungen kommt.
  • RequestedAuthnContext (separater Bereich im SAML-Request): Hierüber lässt sich einschränken, mit welcher Authentifizierungsstufe sich ein*eine User*in an der BayernID anmelden soll. Es stehen hier derzeit die Optionen STORK-QAA-Level-1, STORK-QAA-Level-3 und STORK-QAA-Level-4 zur Verfügung. In diesem Beispiel sollte dann bei der AKDB dann nur noch die Bürgerkonto-Authentifizierungsmethoden mit starkem TrustLevel zur Verfügung stehen

Diese Möglichkeiten kann man bspw. bei Shibboleth erreichen, indem man in der Datei shibboleth2.xml einen SessionInitiator mit entsprechendem Inhalt definiert.

About

Plugin für Keycloak (RH-SSO) zur Anbindung der BayernID über den Brokering-Mechanismus

License:MIT License


Languages

Language:Java 100.0%