Anpassen von Anspruchs, die in id_token ausgegeben werden sollen, wenn OpenID Connect oder OAuth mit AD FS 2016 oder höher verwendet wirdCustomize claims to be emitted in id_token when using OpenID Connect or OAuth with AD FS 2016 or later
ÜbersichtOverview
In diesem Artikel wird gezeigt, wie Sie eine APP erstellen, die AD FS für die OpenID Connect-Anmeldung verwendet.The article here shows you how to build an app that uses AD FS for OpenID Connect sign on. Standardmäßig gibt es jedoch nur einen festgelegten Satz von Ansprüchen, der in der id_token verfügbar ist.However, by default there are only a fixed set of claims available in the id_token. AD FS 2016 und spätere Versionen haben die Möglichkeit, die id_token in OpenID Connect-Szenarios anzupassen.AD FS 2016 and later releases have the capability to customize the id_token in OpenID Connect scenarios.
Wann werden benutzerdefinierte ID-Token verwendet?When are custom ID tokens used?
In bestimmten Szenarien ist es möglich, dass die Client Anwendung nicht über eine Ressource verfügt, auf die zugegriffen werden soll.In certain scenarios, it is possible that the client application does not have a resource that it is trying to access. Daher ist kein Zugriffs Token erforderlich.Therefore, it doesn't really need an access token. In solchen Fällen benötigt die Client Anwendung im Grunde nur ein ID-Token, aber mit einigen zusätzlichen Ansprüchen, um die Funktionalität zu unterstützen.In such cases, the client application essentially needs only an ID token, but with some additional claims to help in the functionality.
Welche Einschränkungen gelten für das erhalten von benutzerdefinierten Ansprüchen in ID-Token?What are the restrictions on getting custom claims in ID token?
Szenario 1Scenario 1
response_mode
ist festgelegt alsform_post
response_mode
is set asform_post
- Nur öffentliche Clients können benutzerdefinierte Ansprüche im ID-Token erhalten.Only public clients can get custom claims in ID token
- Der Bezeichner der vertrauenden Seite (Web-API-Bezeichner) muss mit dem Client Bezeichner identisch seinRelying party identifier (Web API identifier) should be the same as the client identifier
Szenario 2Scenario 2
Das Sicherheitsupdate KB4019472 oder höher ist auf Ihren AD FS-Servern installiert.With KB4019472 or later security update installed on your AD FS servers
response_mode
wird als form_post festgelegtresponse_mode
is set as form_post- Sowohl öffentliche als auch vertrauliche Clients können benutzerdefinierte Ansprüche im ID-Token erhalten.Both public and confidential clients can get custom claims in ID token
- Weisen
allatclaims
Sie dem Client – RP-paar den Gültigkeitsbereich zu.Assign scopeallatclaims
to the client – RP pair.
Sie können den Bereich mithilfe des- Grant-ADFSApplicationPermission
Cmdlets zuweisen, wie im folgenden Beispiel gezeigt:You can assign the scope by using the Grant-ADFSApplicationPermission
cmdlet as indicated in the example below:
Grant-AdfsApplicationPermission -ClientRoleIdentifier "https://my/privateclient" -ServerRoleIdentifier "https://rp/fedpassive" -ScopeNames "allatclaims","openid"
Erstellen und Konfigurieren einer OAuth-Anwendung zum Verarbeiten von benutzerdefinierten Ansprüchen in ID-TokenCreating and configuring an OAuth application to handle custom claims in ID token
Führen Sie die folgenden Schritte aus, um die Anwendung in AD FS zum Empfangen des ID-Tokens mit benutzerdefinierten Ansprüchen zu erstellen und zu konfigurieren.Follow the steps below to create and configure the application in AD FS for receiving ID token with custom claims.
Erstellen und Konfigurieren einer Anwendungs Gruppe in AD FS 2016 oder höherCreate and configure an Application Group in AD FS 2016 or later
Klicken Sie in AD FS Verwaltung mit der rechten Maustaste auf Anwendungs Gruppen, und wählen Sie Anwendungs Gruppe hinzufügen aus.In AD FS Management, right-click on Application Groups and select Add Application Group.
Geben Sie im Anwendungs Gruppen-Assistenten für den Namen ADF-so ein, und wählen Sie unter Client-Server Anwendungen die native Anwendung aus, die auf eine Webanwendungsvorlage zugreift .On the Application Group Wizard, for the name enter ADFSSSO and under Client-Server applications select the Native application accessing a web application template. Klicken Sie auf Weiter.Click Next.
Kopieren Sie den Wert für den Client Bezeichner .Copy the Client Identifier value. Sie wird später als Wert für "Ida: ClientID" in der Anwendung web.config Datei verwendet.It will be used later as the value for ida:ClientId in the applications web.config file.
Geben Sie für Umleitungs-URI Folgendes ein: - https://localhost:44320/ .Enter the following for Redirect URI: - https://localhost:44320/. Klicken Sie auf Hinzufügen.Click Add. Klicken Sie auf Weiter.Click Next.
Geben Sie auf dem Bildschirm Web-API konfigurieren den folgenden Wert für Bezeichner ein - https://contoso.com/WebApp .On the Configure Web API screen, enter the following for Identifier - https://contoso.com/WebApp. Klicken Sie auf Hinzufügen.Click Add. Klicken Sie auf Weiter.Click Next. Dieser Wert wird später für " Ida: ResourceId " in der Anwendungs web.config Datei verwendet.This value will be used later for ida:ResourceID in the applications web.config file.
Wählen Sie auf dem Bildschirm Wählen Sie Access Control Richtlinie die Option Alle zulassen aus, und klicken SieOn the Choose Access Control Policy screen, select Permit everyone and click Next.
Vergewissern Sie sich, dass auf dem Bildschirm Anwendungs Berechtigungen konfigurieren die Option OpenID und allatclaims ausgewählt sind, und klicken Sie auf weiter.On the Configure Application Permissions screen, make sure openid and allatclaims are selected and click Next.
Klicken Sie auf dem Bildschirm Zusammenfassung auf weiter.On the Summary screen, click Next.
Klicken Sie im Bildschirm Fertig stellen auf Schließen.On the Complete screen, click Close.
Klicken Sie in AD FS Verwaltung auf Anwendungs Gruppen, um eine Liste aller Anwendungs Gruppen zu erhalten.In AD FS Management, click on Application Groups to get list of all application groups. Klicken Sie mit der rechten Maustaste auf ADF , und wählen Sie Eigenschaften aus.Right-click on ADFSSSO and select Properties. Wählen Sie ADF-so-Web-API aus, und klicken Sie auf Bearbeiten...Select ADFSSSO - Web API and click Edit...
Wählen Sie auf der Seite ADF-so-Web-API-Eigenschaften die Registerkarte Ausstellungs Transformationsregeln aus, und klicken Sie auf Regel hinzufügen.On ADFSSSO - Web API Properties screen, select Issuance Transform Rules tab and click Add Rule...
Wählen Sie auf der Seite Assistent zum Hinzufügen von Transformations Anspruchs Regeln die Option Ansprüche mithilfe einer benutzerdefinierten Regel senden aus der Dropdown-Dropdown-DropdownOn Add Transform Claim Rule Wizard screen, select Send Claims Using a Custom Rule from the drop-down and click Next
Geben Sie im Assistenten zum Hinzufügen von Transformations Anspruchs Regeln im Fenster " Anspruchs Regel Name " den Namen " forcustomittel Token " und in benutzerdefinierte Regel die folgende Anspruchs Regel ein.On the Add Transform Claim Rule Wizard screen, enter ForCustomIDToken in the Claim rule name and the following claim rule in Custom rule. Klicken Sie auf Fertig stellen.Click Finish
x:[] => issue(claim=x);
Hinweis
Sie können auch PowerShell verwenden, um die
allatclaims
Bereiche und zuzuweisenopenid
.You can also use PowerShell to assign theallatclaims
andopenid
scopes.Grant-AdfsApplicationPermission -ClientRoleIdentifier "[Client ID from #3 above]" -ServerRoleIdentifier "[Identifier from #5 above]" -ScopeNames "allatclaims","openid"
Herunterladen und Ändern der Beispielanwendung zum Ausgeben von benutzerdefinierten Ansprüchen in id_tokenDownload and modify the sample application to emit custom claims in id_token
In diesem Abschnitt wird erläutert, wie Sie die Beispiel-Web-App herunterladen und in Visual Studio ändern.This section discusses how to download the sample Web APP and modify it in Visual Studio. Wir verwenden das Azure AD Beispiel, das Sie hierfinden.We will be using the Azure AD sample located here.
Verwenden Sie zum Herunterladen des Beispielprojekts git bash, und geben Sie Folgendes ein:To download the sample project, use Git Bash and type the following:
git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC
So ändern Sie die APPTo Modify the app
Öffnen Sie das Beispiel mithilfe von Visual Studio.Open the sample using Visual Studio.
Erstellen Sie die APP neu, sodass alle fehlenden nuget-Pakete wieder hergestellt werden.Rebuild the app so that all of the missing NuGet packages are restored.
Öffnen Sie die Datei web.config.Open the web.config file. Ändern Sie die folgenden Werte so, dass Sie wie folgt aussehen:Modify the following values so the look like the following:
<add key="ida:ClientId" value="[Replace this Client Id from #3 above under section Create and configure an Application Group in AD FS 2016 or later]" /> <add key="ida:ResourceID" value="[Replace this with the Web API Identifier from #5 above]" /> <add key="ida:ADFSDiscoveryDoc" value="https://[Your ADFS hostname]/adfs/.well-known/openid-configuration" /> <!--<add key="ida:Tenant" value="[Enter tenant name, e.g. contoso.onmicrosoft.com]" /> <add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />--> <add key="ida:PostLogoutRedirectUri" value="[Replace this with the Redirect URI from #4 above]" />
Öffnen Sie die Datei Startup.auth.cs, und nehmen Sie die folgenden Änderungen vor:Open the Startup.Auth.cs file and make the following changes:
Optimieren Sie die Initialisierungs Logik der OpenID Connect-Middleware mit den folgenden Änderungen:Tweak the OpenId Connect middleware initialization logic with the following changes:
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"]; //private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"]; //private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"]; private static string metadataAddress = ConfigurationManager.AppSettings["ida:ADFSDiscoveryDoc"]; private static string resourceId = ConfigurationManager.AppSettings["ida:ResourceID"]; private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
Kommentieren Sie Folgendes aus:Comment out the following:
//string Authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
Ändern Sie die Optionen für die OpenID Connect-Middleware wie folgt:Further down, modify the OpenId Connect middleware options as in the following:
app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId, //Authority = authority, Resource = resourceId, MetadataAddress = metadataAddress, PostLogoutRedirectUri = postLogoutRedirectUri, RedirectUri = postLogoutRedirectUri
Öffnen Sie die Datei HomeController.cs, und nehmen Sie die folgenden Änderungen vor:Open the HomeController.cs file and make the following changes:
Fügen Sie Folgendes hinzu:Add the following:
using System.Security.Claims;
Aktualisieren Sie die-
About()
Methode wie unten dargestellt:Update theAbout()
method as shown below:[Authorize] public ActionResult About() { ClaimsPrincipal cp = ClaimsPrincipal.Current; string userName = cp.FindFirst(ClaimTypes.WindowsAccountName).Value; ViewBag.Message = String.Format("Hello {0}!", userName); return View(); }
Testen der benutzerdefinierten Ansprüche im ID-TokenTest the custom claims in ID token
Nachdem die obigen Änderungen vorgenommen wurden, drücken Sie F5.Once the above changes have been made, hit F5. Dadurch wird die Beispielseite angezeigt.This will bring up the sample page. Klicken Sie auf anmelden.Click on sign in.
Sie werden auf die AD FS Anmeldeseite umgeleitet.You will be redirected to the AD FS sign-in page. Melden Sie sich bei Azure an.Go ahead and sign in.
Wenn dies erfolgreich ist, sollten Sie sehen, dass Sie jetzt angemeldet sind.Once this is successful, you should see that you are now signed in.
Klicken Sie auf den Link About .Click the About link. Sie sehen "Hello [username]", das aus dem username-Anspruch im ID-Token abgerufen wird.You will see "Hello [Username]" which is retrieved from the username claim in ID token