Anpassen von Ansprüchen, die in id_token beim Verwenden von OpenID Verbinden oder OAuth mit AD FS 2016 oder höher ausgegeben werden

Überblick

Im folgenden Artikel erfahren Sie, wie Sie eine App erstellen, die AD FS für OpenID Verbinden Anmelden verwendet. Standardmäßig gibt es jedoch nur einen festen Satz von Ansprüchen, die im id_token verfügbar sind. AD FS 2016 und höher haben die Möglichkeit, die id_token in OpenID-Verbinden Szenarien anzupassen.

Wann werden benutzerdefinierte ID-Token verwendet?

In bestimmten Szenarien ist es möglich, dass die Clientanwendung keine Ressource hat, auf die sie zugreifen möchte. Daher benötigt es kein Zugriffstoken. In solchen Fällen benötigt die Clientanwendung im Wesentlichen nur ein ID-Token, aber mit einigen zusätzlichen Ansprüchen, die ihnen bei der Funktionalität helfen.

Was sind die Einschränkungen beim Abrufen benutzerdefinierter Ansprüche im ID-Token?

Szenario 1

Screenshot showing Scenario 1 which is using relying party I D to equal client I D.

  1. response_mode ist als festgelegt form_post
  2. Nur öffentliche Clients können benutzerdefinierte Ansprüche im ID-Token abrufen.
  3. Der Bezeichner der vertrauenden Partei (Web-API-Bezeichner) sollte identisch mit dem Clientbezeichner sein.

Szenario 2

Screenshot showing Scenario 2 which is using allatclaims scope.

Mit KB4019472 oder höher auf Ihren AD FS-Servern installierten Sicherheitsupdates

  1. response_mode wird als form_post festgelegt.
  2. Sowohl öffentliche als auch vertrauliche Clients können benutzerdefinierte Ansprüche im ID-Token abrufen.
  3. Zuweisen des Bereichs allatclaims zum Client – RP-Paar.

Sie können den Bereich mithilfe des Grant-ADFSApplicationPermission Cmdlets zuweisen, wie im folgenden Beispiel angegeben:

Grant-AdfsApplicationPermission -ClientRoleIdentifier "https://my/privateclient" -ServerRoleIdentifier "https://rp/fedpassive" -ScopeNames "allatclaims","openid"

Erstellen und Konfigurieren einer OAuth-Anwendung zum Behandeln benutzerdefinierter Ansprüche im ID-Token

Führen Sie die folgenden Schritte aus, um die Anwendung in AD FS für den Empfang von ID-Token mit benutzerdefinierten Ansprüchen zu erstellen und zu konfigurieren.

Erstellen und Konfigurieren einer Anwendungsgruppe in AD FS 2016 oder höher

  1. Klicken Sie in „AD FS-Verwaltung“ mit der rechten Maustaste auf Anwendungsgruppen, und wählen Sie Anwendungsgruppe hinzufügen aus.

  2. Geben Sie im Anwendungsgruppen-Assistenten für den Namen ADFSSSO ein, und wählen Sie unter Client-Server Anwendungen die native Anwendung aus, die auf eine Webanwendungsvorlage zugreifen kann. Klicken Sie auf Weiter.

    Screenshot of the Welcome page of the Add Application Group Wizard.

  3. Kopieren Sie den Wert für den Clientbezeichner. Sie wird später als Wert für ida:ClientId in den Anwendungen web.config Datei verwendet.

  4. Geben Sie folgendes für Umleitungs-URI ein: - https://localhost:44320/. Klicken Sie auf Hinzufügen. Klicken Sie auf Weiter.

    Screenshot of the Native application page of the Add Application Group Wizard showing the redirect U R I .

  5. Geben Sie auf dem Bildschirm "Web-API konfigurieren " folgendes für Bezeichner - https://contoso.com/WebApp ein. Klicken Sie auf Hinzufügen. Klicken Sie auf Weiter. Dieser Wert wird später für ida:ResourceID in den Anwendungen web.config Datei verwendet.

    Screenshot of the Configure Web API page of the Add Application Group Wizard showing the correct identifier.

  6. Wählen Sie auf dem Bildschirm "Richtlinie auswählen Access Control" die Option "Alle zulassen" aus, und klicken Sie auf "Weiter".

    Screenshot of the Choose Access Control Policy page of the Add Application Group Wizard showing the Permit everyone option highlighted.

  7. Stellen Sie auf dem Bildschirm "Anwendungsberechtigungen konfigurieren " sicher, dass openid und allatclaims ausgewählt sind, und klicken Sie auf "Weiter".

    Screenshot of the Configure Application Permissions page of the Add Application Group Wizard.

  8. Klicken Sie auf dem Bildschirm "Zusammenfassung " auf "Weiter".

    Screenshot of the Summary page of the Add Application Group Wizard.

  9. Klicken Sie auf dem Bildschirm "Abgeschlossen " auf "Schließen".

  10. Klicken Sie in der AD FS-Verwaltung auf Anwendungsgruppen, um eine Liste aller Anwendungsgruppen abzurufen. Klicken Sie mit der rechten Maustaste auf ADFSSSO , und wählen Sie "Eigenschaften" aus. Wählen Sie ADFSSSO - Web-API aus, und klicken Sie auf "Bearbeiten"...

    Screenshot of the A D F S S O Properties dialog box showing the Web API listed in the Applications section.

  11. Wählen Sie auf ADFSSSO - Web-API-Eigenschaftenbildschirm die Registerkarte "Ausgabetransformationsregeln " aus, und klicken Sie auf "Regel hinzufügen"...

    Screenshot of the A D F S S O Properties dialog box Showing the Issuance Transform Rules tab.

  12. Wählen Sie auf dem Bildschirm "Anspruchsregel hinzufügen" die Option " Ansprüche mit einer benutzerdefinierten Regel senden" aus dem Dropdown aus, und klicken Sie auf "Weiter"

    Screenshot of the Select Rule Template page of the Add Transform Claim Rule Wizard showing the Send Claims Using a Custom Rule option selected.

  13. Geben Sie auf dem Bildschirm "Anspruchsregel hinzufügen"ForCustomIDToken in den Anspruchsregelnamen und die folgende Anspruchsregel in der benutzerdefinierten Regel ein. Klicken Sie auf Fertig stellen.

    x:[]
    => issue(claim=x);
    

    Screenshot of the Configure Rule page of the Add Transform Claim Rule Wizard showing the Claim rule name and Custom rule text fields populated.

    Hinweis

    Sie können powerShell auch verwenden, um die allatclaims Bereiche zuzuweisen openid .

    Grant-AdfsApplicationPermission -ClientRoleIdentifier "[Client ID from #3 above]" -ServerRoleIdentifier "[Identifier from #5 above]" -ScopeNames "allatclaims","openid"
    

Herunterladen und Ändern der Beispielanwendung zum Senden benutzerdefinierter Ansprüche in id_token

In diesem Abschnitt wird erläutert, wie Sie die Beispielweb APP herunterladen und in Visual Studio ändern. Hier werden wir das Azure AD Beispiel verwenden.

Um das Beispielprojekt herunterzuladen, verwenden Sie Git Bash, und geben Sie folgendes ein:

git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC

Screenshot of the Git Bash window showing the results of the git clone command.

So ändern Sie die App

  1. Öffnen Sie das Beispiel mithilfe von Visual Studio.

  2. Erstellen Sie die App neu, damit alle fehlenden NuGet Pakete wiederhergestellt werden.

  3. Öffnen Sie die web.config Datei. Ändern Sie die folgenden Werte, sodass die folgenden Werte aussehen:

    <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 AD FS 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 of the web config file showing the modified values.

  4. Öffnen Sie die Datei "Startup.Auth.cs", und nehmen Sie die folgenden Änderungen vor:

    • Optimieren Sie die OpenId Verbinden Middleware-Initialisierungslogik mit den folgenden Änderungen:

      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:

      //string Authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
      

      Screenshot of the Start up Auth file showing the commented out lines of code.

    • Ändern Sie die OpenId-Verbinden Middlewareoptionen weiter unten wie folgt:

      app.UseOpenIdConnectAuthentication(
           new OpenIdConnectAuthenticationOptions
           {
               ClientId = clientId,
               //Authority = authority,
               Resource = resourceId,
               MetadataAddress = metadataAddress,
               PostLogoutRedirectUri = postLogoutRedirectUri,
               RedirectUri = postLogoutRedirectUri
      

      Screenshot of the Start up Auth file showing the modified Open I D Connect middleware options.

  5. Öffnen Sie die Datei "HomeController.cs", und nehmen Sie die folgenden Änderungen vor:

    • Fügen Sie Folgendes hinzu:

      using System.Security.Claims;
      
    • Aktualisieren Sie die About() Methode wie unten dargestellt:

      [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 of the Home Controller file with the requred updates.

Testen der benutzerdefinierten Ansprüche im ID-Token

Nachdem die oben genannten Änderungen vorgenommen wurden, klicken Sie auf F5. Dadurch wird die Beispielseite angezeigt. Klicken Sie auf "Anmelden".

Screenshot of the sample app displayed in a browser.

Sie werden zur AD FS-Anmeldeseite umgeleitet. Melden Sie sich bei Azure an.

Screenshot of the A D F S Sign in page.

Sobald dies erfolgreich ist, sollten Sie sehen, dass Sie jetzt angemeldet sind.

Screenshot of the sample app showing that the user is signed in.

Klicken Sie auf den Link About . Sie werden "Hello [Benutzername]" angezeigt, das aus dem Benutzernamenanspruch im ID-Token abgerufen wird.

Screenshot of the About page in the sample app.

Nächste Schritte

AD FS-Entwicklung