OpenID Connect und SAML-Anmeldung
Neben Microsoft, Google und Facebook kann ein Portal Personen über jeden OpenID Connect oder SAML 2.0-Identitätsanbieter anmelden: Okta, Auth0, Microsoft Entra External ID, den eigenen Entra-Tenant eines Kunden oder Partners, AD FS, Ping, Google Workspace. Jeder konfigurierte Anbieter ist ein Button auf der Anmeldeseite und benötigt keinen Code.
Eine Anmeldung über einen dieser Anbieter wird genau wie eine Microsoft- oder Google-Anmeldung abgeglichen, verknüpft oder als Kontakt registriert. Interne Benutzer (Systemnutzer) melden sich bei Microsoft an – siehe Entra ID Sign-In Setup.
Mach es an
Projekte, die aus den Vorlagen für externe Nutzer erstellt wurden, haben dies bereits in Program.cs. Es liest jeden unter und Authentication:Saml2konfigurierten Authentication:OpenIdConnect Anbieter und fügt keinen hinzu, bis einer konfiguriert ist:
builder.Services.AddAuthentication()
.AddOpenIdConnectProviders(builder.Configuration)
.AddSaml2Providers(builder.Configuration);
SAML stammt aus dem Paket, auf das PowerPortalsPro.Identity.Saml2 sich diese Projekte beziehen. Ein Projekt, das vor dieser Funktion erstellt wurde, benötigt den Aufruf und das hinzugefügte Paket.
Adressen zur Registrierung beim Anbieter
Jeder Anbieter hat einen Namen – den Schlüssel seines Konfigurationsabschnitts, ContosoOkta wie in den untenstehenden Beispielen – und die Adressen, zu denen der Anbieter die Leute zurückschickt, bestehen aus ihm in Kleinbuchstaben. Registrieren Sie sie genau, einmal für jeden Host, auf dem das Portal läuft.
| Was | Adresse |
|---|---|
| OpenID Connect redirect URI | https://your-portal.example.com/signin-{name} |
| SAML-Assertions-Consumer-Service (HTTP-POST) | https://your-portal.example.com/saml2/{name}/acs |
| SAML-Entitäts-ID (Publikum) | https://your-portal.example.com/saml2/{name} |
| Die SAML-Metadaten des Portals | https://your-portal.example.com/saml2/{name}/metadata |
Die Adressen sind in jeder Sprache gleich. Eine Anmeldung, die auf einer Seite in einer anderen Sprache beginnt – /es/… – geht über die eigene Adresse der Seite zurück und dann auf die Seite, auf der sie in der jeweiligen Sprache begann.
OpenID-Connect-Anbieter
Füge für jeden Anbieter Authentication:OpenIdConnectunter unter einen Abschnitt hinzu. Halte den Client lokal in Benutzergeheimnissen und in Key Vault nach der Bereitstellung geheim.
{
"Authentication": {
"OpenIdConnect": {
"ContosoOkta": {
"DisplayName": "Contoso",
"Authority": "https://contoso.okta.com/oauth2/default",
"ClientId": "0oa1b2c3d4e5f6g7h8i9",
"ClientSecret": "<in user secrets or Key Vault>",
"TrustedEmailDomains": [ "contoso.com" ]
}
}
}
}
| Schauplatz | Was es ist |
|---|---|
DisplayName | Der Name auf dem Anmeldebutton. Standardmäßig ist der Name des Anbieters. |
Authority | Der Aussteller des Anbieters – die Adresse, unter der er /.well-known/openid-configuration steht. Erforderlich, sofern MetadataAddress nicht angegeben. |
MetadataAddress | Die eigene Adresse des Discovery-Dokuments, für einen Anbieter, der es woanders veröffentlicht. |
ClientId, ClientSecret | Die Client-ID des Portals und das Geheimnis beim Anbieter. Erforderlich. |
Scopes | Skalen, nach denen man fragen sollte, außer openid, profile und email, die immer angefordert werden. |
CallbackPath | Die Umleitung des URI-Pfades, wann /signin-{name} geht nicht. |
TrustedEmailDomains | Die E-Mail-Domains, denen dieser Anbieter vertraut wird – siehe Welche Adressen untenstehend vertrauen . Standardmäßig leer. In einer App Service-Einstellung schreiben Sie sie kommagetrennt. |
GetClaimsFromUserInfoEndpoint | Ob das Profil vom Benutzerdatenpunkt des Anbieters sowie vom ID-Token gelesen werden soll. Standardmäßig aktiviert, da einige Anbieter keine E-Mail-Adresse in das ID-Token eingeben. |
Das Portal verwendet den Autorisierungscode-Fluss mit PKCE, meldet sich über das externe Cookie von Identity an und speichert keine Token. Es liest die ID der Person aus sub, sowie deren Adresse und Namen aus email, given_name und family_name.
Okta (OpenID Connect)
- Erstellen Sie eine App-Integration: OIDC - OpenID Connect vom Typ Web Application mit der Genehmigungscode-Gewährung .
- Fügen Sie die Redirect-URI des Portals als Sign-in-Redirect-URI hinzu, weisen Sie Personen oder Gruppen zu, die sich anmelden dürfen, und kopieren Sie die Client-ID und das Geheimnis.
- Die Autorität ist der Aussteller Ihres Autorisierungsservers, z. B.
https://contoso.okta.com/oauth2/default.
Auth0
- Erstellen Sie eine Anwendung vom Typ Regular Web Application.
- Fügen Sie die Redirect-URI des Portals zu Allowed Callback-URLs hinzu und kopieren Sie die Client-ID und das Secret.
- Die Autorität ist z.
https://contoso.us.auth0.com/B. die Domain Ihres Mieters oder Ihre eigene Domain.
Microsoft Entra Externe ID
- Im externen Tenant registrieren Sie eine Anwendung mit der Redirect-URI des Portals als Web-Redirect-URI und fügen Sie ein Client-Secret hinzu.
- Erstellen Sie einen Benutzerablauf für Anmeldung und Anmeldung und fügen Sie die Anwendung hinzu.
- Die Autorität ist
https://<tenant subdomain>.ciamlogin.com/<tenant id>/v2.0. Wenn der User Flow jede Adresse vor der Erstellung eines Kontos überprüft – E-Mail mit Passwort und Einmal-Passcode tun es beide – handelt es sich dabei um einen Identitätsanbieter, den Sie für Ihre eigenen Kunden betreiben, undTrustedEmailDomainsder auch ...*
Entra-Mieter eines Kunden oder Partners
Für eine Organisation, deren Nutzer sich mit eigenen Arbeitskonten anmelden sollten, ohne den Multi-Tenant-Microsoft-Button:
- Registrieren Sie in ihrem Tenant eine einzelne Tenant-Anwendung mit der Redirect-URI des Portals als Web-Redirect-URI und fügen Sie ein Client-Secret hinzu.
- Die Autorität ist
https://login.microsoftonline.com/<their tenant id>/v2.0. - Listen Sie ihre Domains auf
TrustedEmailDomains; eine Adresse wird anderswo zuerst per E-Mail bestätigt. Die ID ihres Tenants erreicht die Sitzung, ebenso wie beim Microsoft-Button. Entras eigene Verifizierungsansprüche (xms_edov,verified_primary_email) stammen nicht von einem Anbieter: Der dahinterstehende Tenant verwaltet die gesendeten Ansprüche.
SAML 2.0-Anbieter
Fügen Sie für jeden Anbieter Authentication:Saml2unter unter einen Abschnitt hinzu. Die Metadaten des Anbieters geben dem Portal seine Anmeldeadresse und die Zertifikate an, mit denen seine Antworten signiert sind; sie werden jeden Tag erneut gelesen, sodass ein Zertifikat, das der Anbieter überträgt, abgerufen wird.
{
"Authentication": {
"Saml2": {
"Fabrikam": {
"DisplayName": "Fabrikam",
"MetadataAddress": "https://login.microsoftonline.com/<tenant id>/federationmetadata/2007-06/federationmetadata.xml?appid=<app id>",
"TrustedEmailDomains": [ "fabrikam.com" ]
}
}
}
}
| Schauplatz | Was es ist |
|---|---|
DisplayName | Der Name auf dem Anmeldebutton. Standardmäßig ist der Name des Anbieters. |
MetadataAddress | Die Adresse der Metadaten des Identitätsanbieters. Erforderlich und muss .https |
IdentityProviderEntityId | Die Entitäts-ID des Identitätsanbieters, von der die Antworten ausgegeben werden müssen. Standardmäßig ist die Identitäts-ID seiner Metadaten. |
EntityId | Die eigene Entitäts-ID des Portals. Standardisiert auf https://{host}/saml2/{name} den jeweiligen Host, an den die Anfrage kam; setze sie, wenn das Portal auf mehr als einem Host antwortet, sodass sie sich eine Registrierung beim Anbieter teilen. |
CallbackPath, MetadataPath | Die Pfade des Assertion-Consumer-Services und der Metadaten, wann /saml2/{name}/acs und /saml2/{name}/metadata wenn nicht. |
TrustedEmailDomains | Die E-Mail-Domains, denen dieser Anbieter vertraut wird – siehe Welche Adressen untenstehend vertrauen . Standardmäßig leer. In einer App Service-Einstellung schreiben Sie sie kommagetrennt. |
AllowIdentityProviderInitiated | Akzeptiert Anmeldungen, die der Anbieter startet – jemand öffnet das Portal über eine Kachel im Dashboard seines Anbieters. Standardmäßig ausgeschaltet. Sie gehen auf die externe Login-Seite des Portals und dann auf eine lokale Seite, die vom RelayState (/ordersReturnUrl=/ordersoder ) benannt wird. Jede Antwort wird einmal pro Server akzeptiert. |
RequireHttpsMetadata | Ob MetadataAddress es sein httpsmuss. Standardmäßig eingeschaltet; schalte es nur aus, um einen Anbieter auf deinem eigenen Rechner auszuprobieren. |
Antworten müssen durch ein Zertifikat in den Metadaten des Anbieters signiert werden, das durch seine Entitäts-ID ausgegeben wird, für die Entitäts-ID des Portals, an den Assertion-Consumer-Service gesendet und als Antwort auf die Anfrage desselben Browsers gesendet werden. Die NameID identifiziert das Konto, daher muss sie persistent sein oder die E-Mail-Adresse; eine vorübergehende wird abgelehnt. Adresse und Name werden aus den Attributen gelesen, die Anbieter häufig verwenden: email, mail, emailaddress und die WS-Federation-Anspruchsnamen, und givenName /oder firstName und surname oder lastName.
Microsoft Entra ID (Unternehmensanwendung)
- Erstellen Sie eine Unternehmensanwendung, integrieren Sie alle anderen Anwendungen, die Sie nicht in der Galerie finden, und wählen Sie SAML Single Sign-on.
- Setzen Sie die Identifier (Entitäts-ID) auf die Entitäts-ID des Portals und die Antwort-URL auf den Assertion-Consumer-Service.
- Kopieren Sie die App Federation Metadata URL in
MetadataAddress, und weisen Sie die Benutzer oder Gruppen zu, die sich anmelden können.
Okta (SAML)
- Erstellen Sie eine App-Integration vom Typ SAML 2.0.
- Setze die Single Sign-on URL auf den Assertion Consumer Service und Audience URI (SP Entity ID) auf die Entitäts-ID des Portals; wähle ein Persistent- oder EmailAddress-Name ID-Format und füge ,
firstNamesowielastNameAttributanweisungen hinzuemail. - Kopiere die Metadaten-URL der Anwendung in
MetadataAddress.
AD FS
- Fügen Sie einen vertrauenden Parteivertrauen hinzu, der die Metadaten des Portals von seiner Adresse importiert.
- Fügen Sie Anspruchsausgaberegeln hinzu, die die E-Mail-Adresse, den Vor- und Nachnamen sowie eine persistente Namenserkennung senden.
MetadataAddressisthttps://<your AD FS host>/FederationMetadata/2007-06/FederationMetadata.xml.
Unterschriebene Anfragen und verschlüsselte Behauptungen
Die meisten Anbieter benötigen keines von beidem. Für einen, der signierte Authentifizierungsanfragen erfordert oder seine Behauptungen verschlüsselt, fügen Sie den Anbieter im Code mit den Zertifikaten hinzu; beide werden in den Metadaten des Portals veröffentlicht, damit der Anbieter sie importieren kann.
builder.Services.AddAuthentication().AddPortalSaml2(
"Fabrikam",
new Saml2ProviderSettings
{
DisplayName = "Fabrikam",
MetadataAddress = "https://sts.fabrikam.com/FederationMetadata/2007-06/FederationMetadata.xml",
TrustedEmailDomains = ["fabrikam.com"],
},
options =>
{
options.SigningCertificate = signingCertificate;
options.DecryptionCertificate = decryptionCertificate;
});
Welche Adressen sind vertrauenswürdig
Ein Anmeldeformular, dessen Adresse das Portal vertraut, geht direkt in den Kontakt, der es hat, und ein neues Konto beginnt mit bestätigter Adresse. Jede andere Adresse wird zuerst per E-Mail bestätigt, einmal per E-Mail; danach findet der Link zwischen Anmeldung und Kontakt.
- Ein Anbieter wird nur für die in seinem
TrustedEmailDomainsaufgeführten Domains vertraut, genau abgestimmt –contoso.comdeckt nicht ab.mail.contoso.comListen Sie die Domains auf, deren Mailboxen die Organisation hinter dem Anbieter kontrolliert. - Ein Anbieter, der behauptet, eine Adresse nicht verifiziert zu haben (die
email_verifiedvon OpenID Connect istfalsees), wird dafür nicht vertraut, egal was die Liste sagt. - Nichts anderes ist das: Ein Anbieter kann keine Adresse garantieren, indem er die eigenen Ansprüche des Portals sendet, und ein auf andere Weise hinzugefügtes Anmeldeschema bürgt nie dafür.
Wichtig
*Vertraut jeder Adresse, die der Anbieter behauptet. Nutze es nur für einen Identitätsanbieter, den du für deine eigenen Nutzer betreibst und der Adressen überprüft, bevor er sie behauptet. Nutze es niemals für einen Anbieter, den ein Kunde oder Partner verwaltet: Jeder, der ihn verwaltet, kann ein Konto mit jeder Adresse erstellen, einschließlich einer zu einem Kontakt einer anderen Organisation, und würde sich als dieser Kontakt anmelden.
Anmelde-Buttons
Jeder Anbieter ist ein Button auf der Anmeldeseite, der mit seinem Anzeigenamen beschriftet ist. Vier weitere Einstellungen im Bereich eines Anbieters verändern, wie der Button aussieht und wo er sich befindet:
| Schauplatz | Was es ist |
|---|---|
Icon | Ein kleines Logo, das vor dem Namen im Standard-Button angezeigt wird – zum Beispiel das eigene Logo eines Kunden auf der Anmeldung. |
ButtonImage | Ein Bild, das anstelle des Standardknopfes angezeigt wird: der eigene "Anmelden mit ..." Knopf. |
ButtonImageDark | Das gleiche Bild gilt für das dunkle Thema. Ohne es ButtonImage wird es in beiden verwendet. |
Order | Wo der Button sitzt: Unten kommt zuerst, und Buttons mit derselben Reihenfolge behalten die Reihenfolge, in der ihre Anbieter hinzugefügt wurden. Standardmäßig 0. |
Ein Bild ist ein Pfad vom Wurzel der Seite – eine Datei im Portal wwwroot, wie zum /images/contoso-logo.svg Beispiel – oder eine https Adresse. Ein Pfad wird auf jeder Seite und in jeder Sprache vom Root-Grund der Seite bereitgestellt. Alles andere stoppt das Portal beim Start und benennt die Einstellung.
"ContosoOkta": {
"DisplayName": "Contoso",
"Icon": "/images/contoso-logo.svg",
"Order": -1,
...
}
Jeder andere Anbieter-Button, einschließlich der von Microsoft und Google, wird im Code geändert:
builder.Services.ConfigureSignInButton("Microsoft", button => button.Order = 1);
Microsoft, Google und Facebook zeigen ihre eigenen "Mit ..."-Buttons an, in hellen und dunklen Versionen, es sei denn, man legt eine dieser Buttons für sie ein.
Fehlerbehebung
- Der Anbieter lehnt die Weiterleitungs-URI oder Antwort-URL ab. Sie muss exakt übereinstimmen – Schema, Host, Port und Pfad. Registrieren
https://{host}/signin-{name}Sie – oder die SAML-Adressen – für jeden Host, auf dem das Portal läuft. - Das Portal startet nicht, sondern nennt eine
Authentication:OpenIdConnectoderAuthentication:Saml2Einstellung. Ein konfigurierter Anbieter fehlt ein erforderlicher Wert oder hat einen fehlerhaften. Der MCP-Server listetcheck_setupjeden Anbieter auf, was ihm fehlt und welche Adressen registriert werden sollen. - Eine SAML-Anmeldung scheitert mit "Signatur ist ungültig". Die Antwort wurde von einem Zertifikat signiert, das das Portal nicht gesehen hat – meist, weil der Anbieter sein Zertifikat übertragen hat. Das Portal liest die Metadaten innerhalb eines Tages erneut; starte es jetzt neu, um es zu lesen.
- "Publikumsvalidierung fehlgeschlagen" oder "Ungültiger Aussteller". Die beim Anbieter registrierte Entitäts-ID ist nicht die, die das Portal verwendet – so eingestellt
EntityId, dass sie übereinstimmt – oder die Antwort kam von einer anderen Entität alsIdentityProviderEntityIdden Namen. - Eine SAML-Anmeldung scheitert, weil die NameID vorübergehend ist. Lass den Anbieter eine persistente NameID oder die E-Mail-Adresse schicken.
- Das Öffnen des Portals über die Dashboard-Kachel eines Anbieters führt zurück zur Anmeldeseite. Das Portal hat nicht nach dieser Anmeldung gefragt. Für diesen Anbieter eingestellt
AllowIdentityProviderInitiated. - Jede erste Anmeldung sendet eine Bestätigungs-E-Mail. Die Adressdomain befindet sich nicht in der Domain des Anbieters
TrustedEmailDomains. Das ist der sichere Standard; sobald die Adresse bestätigt ist, gehen spätere Anmeldungen direkt ein.
