Automatische Wahl der Identity Provider
Wichtig: Die in diesem Kapitel beschrieben Konfigurationsmöglichkeiten sind keine Sicherheitsfaktoren. Sie dienen nur der Benutzerfreundlichkeit, in dem Optionen für den Benutzer situativ ausgeblendet oder automatisch ausgewählt werden. Benutzer haben per Design die Möglichkeit, die Einschränkungen aufzuheben.
Standardmässig werden einem Benutzer alle externen Identity Provider angezeigt, die für den Mandanten konfiguriert sind. Die Liste der Identity Provider, die dem Benutzer angezeigt werden, kann eingeschränkt werden oder der Benutzer kann automatisch an einen Provider weitergeleitet werden.
Dazu gibt es drei Methoden, die in folgender Reihenfolge ausgeführt werden:
- Client Identity-Provider-Einschränkungen
- Selektoren
- Applikations-/Benutzer-Wunsch
Das heisst, Einschränkungen die der Client vorgibt, werden durch Selektoren weiter eingeschränkt. Und so weiter.
Client Identity-Provider-Einschränkungen
Ein Client kann auf bestimmte Identity Provider beschränkt werden, in dem eine Liste von Identity Providern in tenants.<tenant>.Clients.<client>.IdentityProviderRestrictions
hinterlegt wird.
Wird die Option tenants.<tenant>.Clients.<client>.EnableLocalLogin
auf false
gesetzt, wird der Benutzer automatisch an den Identity Provider weitergeleitet, sofern für den Client nur ein einziger Identity Provider zulässig ist.
{
"tenants": {
"<tenant>": {
"ExternalIdps": {
"auth0": {},
"adfs": {}
},
"Clients": [
{
"ClientId": "webclient",
"IdentityProviderRestrictions": [
"auth0",
"adfs"
]
},
{
"ClientId": "metatool",
"IdentityProviderRestrictions": ["adfs"],
"EnableLocalLogin": "false"
}
]
}
}
}
Selektoren
Mit Selektoren kann die Liste der Identity Provider für den Benutzer auf Basis der ClientId
und / oder der Quell-IP-Adresse eingeschränkt werden.
Ein Liste von Selektoren wird in tenants.<tenant>.ExternalIdpSelectors
angelegt. Die Objekte dieser Liste haben folgende Eigenschaften:
Clients
(optional): Eine Liste vonClientId
s's auf die der Selektor beschränkt ist.NetworkRanges
(optional): Eine Liste von IP-Adress-Bereichen nach der CIDR-Notation0.0.0.0/0
/0:0:0:0:0:0:0:0/0
, auf die der Selektor beschränkt ist. Wenn der CMI STS hinter einem Proxy betrieben wird, müssen die Forwarded Headers konfiguriert werden, damit die IP-Adresse des Clients ausgewertet wird, und nicht die des Proxies.Providers
(erforderlich): Eine Liste von Identity Providern auf den der Selektor den Benutzer einschränkt. Der Providermetatool
bezeichnet das lokale Login beim CMI (BuiltIn-Login). Enthält die Liste nur einen Eintrag, wird der Benuzter automatisch an diesen Provider weitergeleitet.Enabled
(optional, Standard:true
): Aktiviert oder deaktiviert den Selektor.
Die Selektoren werden in der Reihenfolge ihrer Deklaration abgearbeitet. Der erste zutreffende Selektor wird verwendet. Wenn kein Selektor zutrifft, werden die Identity Provider nicht durch Selektoren eingeschränkt. Der Netzwerkbereich 0.0.0.0/0
trifft immer zu. Für IPv6-Adressen kann die verkürzte Schreibweise verwendet werden (2001:0DB8:ABCD:0012:0000:0000:0000:0000/64
-> 2001:DB8:ABCD:12::/64
).
{
"tenants": {
"<tenant>": {
"ExternalIdps": {
"auth0": {},
"adfs": {}
},
"ExternalIdpSelectors": [
{
"NetworkRanges": ["::1/128"],
"Providers": ["metatool"]
},
{
"NetworkRanges": ["70.5.39.128/32", "70.5.39.130/32"],
"Providers": ["auth0"]
},
{
"Clients": ["metatool", "webClient"],
"NetworkRanges": ["0.0.0.0/0"],
"Providers": ["afds"]
},
{
"Clients": ["webAppClient"],
"NetworkRanges": ["0.0.0.0/0"],
"Providers": ["metatool"]
}
]
}
}
}
Applikations-/Benutzer-Wunsch
Der Benutzer wird automatisch zu einem Identity Provider weitergleitet, wenn im Authentication Request der Parameter acr_values
das Schlüssel-/Wert-Paar idp:<idpname>
enthält.
Die automatische Weiterleitung wird durchgeführt, wenn der gewünschte Identity Provider nicht von anderen Einschränkungen betroffen ist.
Einschränkungen aufheben
{
"tenants": {
"<tenant>": {
"AllowManualSchemeSelection": true,
"ExternalIdpSelectors": [...]
}
}
}
AllowManualSchemeSelection
(optional, Standard:true
): Erlaubt dem Benutzer das Aufheben der IDP-Selektoren.
Der Benutzer kann alle Einschränkungen aufheben und die Liste aller IDP anzeigen lassen. Die Hauptanwendungsfälle sind:
- Alle Benutzer sollen automatisch an einen einzigen verfügbaren IDP weitergleitet werden, um ein SSO-Verhalten zu erreichen. Jedoch soll es dem CMI BuiltIn-Administrator möglich sein, die automatische Weiterleitung zu unterbinden, um sich über das Builtin-Login anmelden zu können.
- Eine Person hat einen normalen Benutzer und einen Power-Benutzer mit erweiterten Rechten. Im Normalfall arbeitet die Person mit dem normalen Benutzer. Für administrative Tätigkeiten verwendet die Person den Power-Benutzer, der jedoch über einen anderen IDP authentifiziert wird. In einem solchen Fall ist es möglicherweise notwendig, die reduzierte Liste der IDP aufzuheben.
Die Aufhebung der Einschränkungen muss durch die Client-Anwendung über einen Parameter im Authorize-Request erfolgen. Der Parameter kann in zwei Varianten übermittelt werden.
1. Als Url-Query-Parameter
Dem Authorize-Request kann ein URL-Query-Parameter manual_scheme_selection=true
hinzugefügt werden. Ist der Wert nicht true
, erfolgt keine Aufhebung der Einschränkungen. Dieser Parameter ist nicht durch OpenId Connect spezifiziert und stellt eine CMI-spezifische Lösung dar.
Beispiel:
GET https://{CMI STS 3 host}/schwerzenwil/identity/connect/authorize
?client_id=webAppClient
&redirect_uri=https://{webclient host}/#/security/signin?_&
&response_type=id_token token
&scope=openid profile metatool
&state=...
&nonce=...
&acr_values=tenant:schwerzenwil
&manual_scheme_selection=true
(Zeilenumbrüche und fehlende URL-Codierung dienen nur der besseren Lesbarkeit)
2. Als ACR KeyValue-Pair
Wird eine OpenId-Connect-Client-Library verwendet, die das Hinzufügen von beliebigen Query-Parametern nicht ermöglicht, können die protokollkonformen ACR Values verwendet werden.
Wird der URL-Query-Parameter nicht gefunden, werden stattdessen die ACR Values nach dem Key-Value-Pair manual_scheme_selection:true
durchsucht. Das heisst, wenn der Query-Parameter manual_scheme_selection
vorhanden ist, werden die ACR Values nicht untersucht, unabhängig davon welchen Wert dem Query-Parameter zugeordnet wurde.
Beispiel:
GET https://{CMI STS 3 host}/schwerzenwil/identity/connect/authorize
?client_id=webAppClient
&redirect_uri=https://{webclient host}/#/security/signin?_&
&response_type=id_token token
&scope=openid profile metatool
&state=...
&nonce=...
&acr_values=tenant:schwerzenwil manual_scheme_selection:true
(Zeilenumbrüche und fehlende URL-Codierung dienen nur der besseren Lesbarkeit)