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

Screenshot, der das Szenario 1 zeigt, in dem die e d der vertrauenden Seite für den Client i d verwendet wird

  1. response_mode ist festgelegt als form_postresponse_mode is set as form_post
  2. Nur öffentliche Clients können benutzerdefinierte Ansprüche im ID-Token erhalten.Only public clients can get custom claims in ID token
  3. 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

Screenshot, der das Szenario 2 zeigt, das den Bereich allatclaims verwendet.

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

  1. response_mode wird als form_post festgelegtresponse_mode is set as form_post
  2. 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
  3. Weisen allatclaims Sie dem Client – RP-paar den Gültigkeitsbereich zu.Assign scope allatclaims 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

  1. 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.

  2. 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.

    Screenshot der Willkommensseite des Assistenten zum Hinzufügen von Anwendungs Gruppen.

  3. 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.

  4. 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.

    Screenshot der Seite "native Anwendung" des Assistenten zum Hinzufügen von Anwendungs Gruppen mit der Umleitungs-U R I.

  5. 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.

    Screenshot der Seite "Web-API konfigurieren" des Assistenten zum Hinzufügen von Anwendungs Gruppen mit dem richtigen Bezeichner.

  6. 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.

    Screenshot der Seite "Access Control Richtlinie auswählen" des Assistenten zum Hinzufügen von Anwendungs Gruppen zeigt, dass die Option Alle zulassen hervorgehoben ist.

  7. 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.

    Screenshot der Seite "Anwendungs Berechtigungen konfigurieren" des Assistenten zum Hinzufügen von Anwendungs Gruppen.

  8. Klicken Sie auf dem Bildschirm Zusammenfassung auf weiter.On the Summary screen, click Next.

    Screenshot der Seite "Zusammenfassung" des Assistenten zum Hinzufügen von Anwendungs Gruppen.

  9. Klicken Sie im Bildschirm Fertig stellen auf Schließen.On the Complete screen, click Close.

  10. 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...

    Screenshot des Dialog Felds mit den Eigenschaften von "D s. s", das die im Abschnitt "Anwendungen" aufgeführte Web-API anzeigt.

  11. 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...

    Screenshot des Dialog Felds mit den Eigenschaften einer D s. s O-Eigenschaft mit der Registerkarte Ausstellungs Transformationsregeln.

  12. 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

    Screenshot der Seite "Regel Vorlage auswählen" des Assistenten zum Hinzufügen von Transformations Anspruchs Regeln zeigt die ausgewählte Option "Ansprüche mithilfe einer benutzerdefinierten Regel senden" an.

  13. 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);
    

    Screenshot der Seite "Regel konfigurieren" des Assistenten zum Hinzufügen von Transformations Anspruchs Regeln, in dem die Felder Anspruchs Regel Name und benutzerdefinierter Regel Text angezeigt werden.

    Hinweis

    Sie können auch PowerShell verwenden, um die allatclaims Bereiche und zuzuweisen openid .You can also use PowerShell to assign the allatclaims and openid 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

Screenshot des git bash-Fensters, in dem die Ergebnisse des git-Klon Befehls angezeigt werden.

So ändern Sie die APPTo Modify the app

  1. Öffnen Sie das Beispiel mithilfe von Visual Studio.Open the sample using Visual Studio.

  2. 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.

  3. Ö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]" />
    

    Screenshot der Webkonfigurationsdatei mit den geänderten Werten.

  4. Ö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);
      

      Screenshot der Start-auth-Datei, in der die auskommentierten Codezeilen angezeigt werden.

    • Ä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
      

      Screenshot der Start Authentifizierungs Datei mit den geänderten geöffneten I D Connect-Middleware-Optionen.

  5. Ö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 the About() 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();
      }
      

      Screenshot der Home Controller-Datei mit den erforderlich Updates.

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.

Screenshot der Beispiel-APP, die in einem Browser angezeigt wird.

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.

Screenshot der Anmeldeseite für eine D-e-a-Seite.

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.

Screenshot der Beispiel-APP, die anzeigt, dass der Benutzer angemeldet ist.

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

Screenshot der Seite "Info" in der Beispiel-app.

Nächste SchritteNext Steps

AD FS-EntwicklungAD FS Development