SmartCollect SC² Dokumentation / Index.md / Generische OAuth-Authentifizierung

Generische OAuth-Authentifizierung

Sie können viele verschiedene OAuth2-Authentifizierungsdienste mit SmartCollect SC² konfigurieren, indem Sie die generische OAuth2-Funktion verwenden. Beispiele:

Diese Callback-URL muss mit der vollständigen HTTP-Adresse übereinstimmen, die Sie in Ihrem Browser für den Zugriff auf SmartCollect SC² verwenden, jedoch mit dem Präfixpfad /login/generic_oauth.

Sie müssen eventuell die Option root_url von [server] setzen, damit die Callback-URL korrekt ist. Zum Beispiel für den Fall, dass Sie SmartCollect SC² hinter einem Proxy bereitstellen.

Beispiel-Konfiguration:

[auth.generic_oauth]
enabled = true
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes =
auth_url =
token_url =
api_url =
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
tls_skip_verify_insecure = false
tls_client_cert =
tls_client_key =
tls_client_ca =

Setzen Sie api_url auf die Ressource, die OpenID UserInfo kompatible Informationen zurückgibt.

Sie können auch die vom Client verwendete SSL/TLS-Konfiguration angeben.

  • Setzen Sie tls_client_cert auf den Pfad des Zertifikats.
  • Setzen Sie tls_client_key auf den Pfad, der den Schlüssel enthält.
  • Setzen Sie tls_client_ca auf den Pfad, der eine Liste vertrauenswürdiger Zertifizierungsstellen enthält.

tls_skip_verify_insecure` steuert, ob ein Client die Zertifikatskette und den Hostnamen des Servers verifiziert. Wenn es wahr ist, dann akzeptiert SSL/TLS jedes vom Server vorgelegte Zertifikat und jeden Hostnamen in diesem Zertifikat. Sie sollten dies nur zum Testen verwenden, da dieser Modus SSL/TLS anfällig für Man-in-the-Middle-Angriffe macht.

SmartCollect SC² versucht, die E-Mail-Adresse des Benutzers zu ermitteln, indem es den OAuth-Anbieter wie unten beschrieben in der folgenden Reihenfolge abfragt, bis eine E-Mail-Adresse gefunden wird:

  1. Überprüfen Sie das Vorhandensein einer E-Mail-Adresse über das Feld “E-Mail”, das im OAuth-Parameter “id_token” codiert ist.
  2. Prüfen Sie auf das Vorhandensein einer E-Mail-Adresse über den JMESPath, der über die Konfigurationsoption email_attribute_path angegeben wurde. Das für die Pfadsuche verwendete JSON ist die HTTP-Antwort, die durch die Abfrage des UserInfo-Endpunkts erhalten wurde, der über die Konfigurationsoption “api_url” angegeben wurde. Hinweis: Nur verfügbar in SmartCollect SC² v6.4+.
  3. Prüfen Sie auf das Vorhandensein einer E-Mail-Adresse in der Karte “Attribute”, die im OAuth-Parameter “id_token” kodiert ist. Standardmäßig führt SmartCollect SC² eine Suche in der Attribute-Map unter Verwendung des Schlüssels email:primary durch, dies ist jedoch konfigurierbar und kann durch Verwendung der Konfigurationsoption email_attribute_name angepasst werden.
  4. Abfrage des Endpunkts /emails der API des OAuth-Anbieters (konfiguriert mit api_url) und Überprüfung auf das Vorhandensein einer E-Mail-Adresse, die als primäre Adresse markiert ist.
  5. Wenn in den Schritten (1-4) keine E-Mail-Adresse gefunden wird, dann wird die E-Mail-Adresse des Benutzers auf die leere Zeichenfolge gesetzt.

SmartCollect SC² wird auch versuchen, die Rollenzuordnung über OAuth wie unten beschrieben durchzuführen.

Nur verfügbar in SmartCollect SC² v6.5+.

Überprüfen Sie das Vorhandensein einer Rolle anhand des JMESPath, der über die Konfigurationsoption role_attribute_path angegeben wurde. Das JSON, das für die Pfadsuche verwendet wird, ist die HTTP-Antwort, die durch die Abfrage des UserInfo-Endpunkts erhalten wurde, der über die Konfigurationsoption api_url angegeben wurde. Das Ergebnis nach der Auswertung des JMESPath-Ausdrucks role_attribute_path muss eine gültige SmartCollect SC²-Rolle sein, d. h. Viewer, Editor oder Admin.

Siehe JMESPath-Beispiele für weitere Informationen.

Nur verfügbar in SmartCollect SC² v7.2+.

Passen Sie die Benutzeranmeldung mit der Konfigurationsoption login_attribute_path an. Die Reihenfolge der Operationen ist wie folgt:

  1. SmartCollect SC² wertet den login_attribute_path JMESPath-Ausdruck gegen das ID-Token aus.
  2. Wenn SmartCollect SC² keinen Wert findet, dann wertet SmartCollect SC² den Ausdruck gegen die vom UserInfo-Endpunkt erhaltenen JSON-Daten aus. Die URL des UserInfo-Endpunkts wird in der Konfigurationsoption api_url angegeben.

Sie können den Attributnamen, der zum Extrahieren des ID-Tokens aus dem zurückgegebenen OAuth-Token verwendet wird, mit der Option id_token_attribute_name anpassen.

OAuth2 mit Auth0 einrichten

  1. Erstellen Sie einen neuen Client in Auth0

    • Name: SmartCollect SC²
    • Typ: Reguläre Webanwendung
  2. Gehen Sie zur Registerkarte “Einstellungen” und stellen Sie ein:

    • Erlaubte Callback-URLs: https://<smartcollect domain>/login/generic_oauth
  3. Klicken Sie auf Save Changes (Änderungen speichern) und verwenden Sie dann die Werte oben auf der Seite, um SmartCollect SC² zu konfigurieren:

    [auth.generic_oauth]
    enabled = true
    allow_sign_up = true
    team_ids =
    allowed_organizations =
    name = Auth0
    client_id = <client id>
    client_secret = <client secret>
    scopes = openid profile email
    auth_url = https://<domain>/authorize
    token_url = https://<domain>/oauth/token
    api_url = https://<domain>/userinfo
    

OAuth2 mit Bitbucket einrichten

[auth.generic_oauth]
name = BitBucket
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = account email
auth_url = https://bitbucket.org/site/oauth2/authorize
token_url = https://bitbucket.org/site/oauth2/access_token
api_url = https://api.bitbucket.org/2.0/user
team_ids =
allowed_organizations =

OAuth2 mit Centrify einrichten

  1. Erstellen Sie eine neue benutzerdefinierte OpenID Connect-Anwendungskonfiguration im Centrify-Dashboard.

  2. Erstellen Sie eine einprägsame, eindeutige Anwendungs-ID, z. B. “smartcollect”, “smartcollect_aws”, usw.

  3. Geben Sie weitere grundlegende Konfigurationen ein (Name, Beschreibung, Logo, Kategorie)

  4. Generieren Sie auf der Registerkarte “Trust” ein langes Passwort und geben Sie es in das Feld “OpenID Connect Client Secret” ein.

  5. Geben Sie die URL zur Startseite Ihrer SmartCollect SC²-Instanz in das Feld “Resource Application URL” ein.

  6. Fügen Sie eine autorisierte Redirect-URI wie https://your-smartcollect-server/login/generic_oauth hinzu.

  7. Richten Sie Berechtigungen, Richtlinien usw. wie bei jeder anderen Centrify-App ein

  8. Konfigurieren Sie SmartCollect SC² wie folgt:

    [auth.generic_oauth]
    name = Centrify
    enabled = true
    allow_sign_up = true
    client_id = <OpenID Connect Client ID from Centrify>
    client_secret = <your generated OpenID Connect Client Secret"
    scopes = openid profile email
    auth_url = https://<your domain>.my.centrify.com/OAuth2/Authorize/<Application ID>
    token_url = https://<your domain>.my.centrify.com/OAuth2/Token/<Application ID>
    api_url = https://<your domain>.my.centrify.com/OAuth2/UserInfo/<Application ID>
    

OAuth2 mit OneLogin einrichten

  1. Erstellen Sie einen neuen benutzerdefinierten Anschluss mit den folgenden Einstellungen:

    • Name: SmartCollect SC²
    • Anmeldemethode: OpenID Connect
    • URI umleiten: https://<smartcollect domain>/login/generic_oauth
    • Signier-Algorithmus: RS256
    • Login-URL: https://<smartcollect domain>/login/generic_oauth

    dann:

  2. Fügen Sie eine App zum SmartCollect SC² Connector hinzu:

    • Name anzeigen: SmartCollect SC²

    dann:

  3. Unter der Registerkarte SSO auf der SmartCollect SC² App-Detailseite finden Sie die Client-ID und das Client-Geheimnis.

  4. Ihre OneLogin-Domäne wird mit der URL übereinstimmen, die Sie für den Zugriff auf OneLogin verwenden.

    Konfigurieren Sie SmartCollect SC² wie folgt:

    [auth.generic_oauth]
    name = OneLogin
    enabled = true
    allow_sign_up = true
    client_id = <client id>
    client_secret = <client secret>
    scopes = openid email name
    auth_url = https://<onelogin domain>.onelogin.com/oidc/2/auth
    token_url = https://<onelogin domain>.onelogin.com/oidc/2/token
    api_url = https://<onelogin domain>.onelogin.com/oidc/2/me
    team_ids =
    allowed_organizations =
    

JMESPath Beispiele

Um die Konfiguration eines geeigneten JMESPath-Ausdrucks zu erleichtern, können Sie Ausdrücke mit benutzerdefinierten Nutzdaten unter http://jmespath.org/ testen/auswerten.

Role Mapping

Basic Beispiel:

Im folgenden Beispiel erhält der Benutzer bei der Authentifizierung Editor als Rolle. Der Wert der Eigenschaft Rolle ist die resultierende Rolle, wenn die Rolle eine richtige SmartCollect SC²-Rolle ist, d.h. Betrachter, Editor oder Admin.

Payload:

{
    ...
    "role": "Editor",
    ...
}

Config:

role_attribute_path = role

Erweitertes Beispiel:

Im folgenden Beispiel erhält der Benutzer bei der Authentifizierung Admin als Rolle, da er eine Gruppe Admin hat. Wenn ein Benutzer eine Gruppe Editor hat, erhält er Editor als Rolle, sonst Viewer.

Payload:

{
    ...
    "info": {
        ...
        "groups": [
            "engineer",
            "admin",
        ],
        ...
    },
    ...
}

Config:

role_attribute_path = contains(info.groups[*], 'admin') && 'Admin' || contains(info.groups[*], 'editor') && 'Editor' || 'Viewer'