Vorgehensweise: Implementieren von rollenbasierten Access Control (RBAC) in einer anspruchsfähigen ASP.NET Anwendung mit WIF und ACS
Aktualisiert: 19. Juni 2015
Gilt für: Azure
Gilt für
Zugriffssteuerung für Microsoft Azure Active Directory (auch Zugriffssteuerungsdienst oder ACS)
Windows® Identity Foundation (WIF)
ASP.NET
Zusammenfassung
In diesem Thema wird erläutert, wie Sie die Rollenbasierte Access Control-Autorisierung (RBAC) in anspruchsfähigen ASP.NET Webanwendungen mithilfe von WIF und ACS implementieren.
Inhalte
Ziele
Übersicht
Zusammenfassung von Schritten
Schritt 1 – Erstellen einer einfachen, Ansprüche unterstützenden ASP.NET-Webanwendung
Schritt 2 – Konfigurieren von Rollenansprüchen in ACS
Schritt 3 – Implementieren von Rollenüberprüfungen in einer ASP.NET-Webanwendung
Schritt 4 – Implementieren der Anspruchstransformation mithilfe einer benutzerdefinierten Komponente "ClaimsAuthenticationManager"
Schritt 5 – Testen der Lösung
Verwandte Elemente
Ziele
Konfigurieren von Rollenansprüchen mithilfe von ACS.
Transformieren von Rollenansprüchen mithilfe von ClaimsAuthenticationManager.
Implementieren sie rollenbasierte Zugriffssteuerungsprüfungen mithilfe der IsInRole-Methode und der PrinciaplPermission-Attribute.
Übersicht
RBAC ist ein weit verbreiteter Ansatz zum Einschränken des Zugriffs in Anwendungen. In ASP.NET Webanwendungen wird dieser Ansatz mit der IsInRole-Methode, dem PrincipalPermission-Attribut oder anforderungen implementiert, die seit ASP.NET 1.0 verfügbar sind. Sie können Ansprüche für die Autorisierung verwenden, wodurch bewährte Praktiken beibehalten werden, während neue Technologien wie WIF und ACS verwendet werden. Sie können das WIF-Laufzeitmodul und das SDK hier herunterladen:
Zusammenfassung von Schritten
Schritt 1 – Erstellen einer einfachen, Ansprüche unterstützenden ASP.NET-Webanwendung
Schritt 2 – Konfigurieren von Rollenansprüchen in ACS
Schritt 3 – Implementieren von Rollenüberprüfungen in einer ASP.NET-Webanwendung
Schritt 4 – Implementieren der Anspruchstransformation mithilfe einer benutzerdefinierten Komponente "ClaimsAuthenticationManager"
Schritt 5 – Testen der Lösung
Schritt 1 – Erstellen einer einfachen, Ansprüche unterstützenden ASP.NET-Webanwendung
Dieser Schritt zeigt das Erstellen einer ASP.NET-Basiswebanwendung, die als Grundlage für die Implementierung von RBAC verwendet wird.
So erstellen Sie eine einfache ASP.NET-Webanwendung
Starten Sie Visual Studio mit der Option Als Administrator ausführen. Diese Option ist für WIF erforderlich.
Erstellen Sie eine neue, leere ASP.NET-Webanwendung.
Fügen Sie das ASPX-Webformular hinzu, und geben Sie ihm einen Namen, z. B. default.aspx.
Schritt 2 – Konfigurieren von Rollenansprüchen in ACS
In diesem Schritt wird gezeigt, wie Sie Rollenansprüche im ACS-Verwaltungsportal mithilfe von Regelgruppen konfigurieren. Weitere Informationen finden Sie unter :Implementieren der Tokentransformationslogik mithilfe von Regeln für eine vollständige schrittweise exemplarische Vorgehensweise.
So konfigurieren Sie Rollenansprüche über das ACS-Verwaltungsportal
Führen Sie auf der Seite Anwendung der vertrauenden Seite bearbeiten einen Bildlauf nach unten bis zum Abschnitt Regelgruppen aus, und klicken Sie dann auf den Link der gewünschten Gruppe. Stellen Sie sicher, dass er ausgewählt ist.
Führen Sie auf der Seite Regelgruppe bearbeiten einen Bildlauf nach unten bis zum Abschnitt Regeln aus, und klicken Sie dann auf den Link Regel hinzufügen.
Führen Sie auf der Seite Anspruchsregel hinzufügen einen Bildlauf nach unten bis zum Abschnitt Ausgabeanspruchstyp aus, klicken Sie auf das Optionsfeld Typ auswählen, und wählen Sie dann den folgenden Anspruchstyp aus.
https://schemas.microsoft.com/ws/2008/06/identity/claims/role
Klicken Sie im Abschnitt Ausgabeanspruchswert auf Wert eingeben, und geben Sie dann den folgenden Text als Wert in das Textfeld ein:
BenutzerFügen Sie optional eine Beschreibung hinzu (empfohlen), und klicken Sie dann auf Speichern.
Sie haben soeben den Rollenanspruch User konfiguriert, der jedem beliebigen Token hinzugefügt werden kann. Abhängig von Ihren Anforderungen kann das Szenario ggf. abweichen. Weitere Informationen zum Konfigurieren komplexerer Regeln finden Sie unter How to: Implement Token Transformation Logic Using Rules.
Schritt 3 – Implementieren von Rollenüberprüfungen in einer ASP.NET-Webanwendung
In diesem Schritt wird gezeigt, wie RBAC implementiert wird.
So implementieren Sie RBAC auf einer ASP.NET-Webseite
Fügen Sie einen Verweis auf die Assembly Microsoft.IdentityModel hinzu.
Öffnen Sie den Code für default.aspx.cs.
Fügen Sie Folgendes mithilfe von Deklarationen hinzu.
using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security;
Statten Sie den Ereignishandler Page_Load mit der folgenden Sicherheitsanforderung aus. Dieses Attribut überprüft, ob der aktuelle Benutzer die Rolle User ausübt. Ist dies nicht der Fall, wird eine Ausnahme ausgelöst.
[PrincipalPermission(SecurityAction.Demand, Role = "User")]
Fügen Sie dem Textkörper des Ereignishandlers Page_Load den folgenden Code hinzu. Dies ist mit der im Code ausgedrückten Anforderung identisch.
PrincipalPermission p = new PrincipalPermission(null, "User"); p.Demand();
Fügen Sie dem Textkörper des Ereignisses Page_Load den folgenden Code hinzu. Im Gegensatz zum vorherigen Code löst dieser Code keine Ausnahme aus. Stattdessen gibt IsInRole einen booleschen Wert zurück, der angibt, ob der aktuelle Benutzer die angegebene Rolle ausübt.
if (!User.IsInRole("User")) throw new SecurityException("Access is denied.");
Der vollständige Code sollte dem folgenden Code ähnlich sehen.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security; namespace WebIsInRoleACS { public partial class _default : System.Web.UI.Page { //THIS SHOULD THROW AN EXCEPTION [PrincipalPermission(SecurityAction.Demand, Role = "User")] protected void Page_Load(object sender, EventArgs e) { //THIS SHOULD THROW AN EXCEPTION PrincipalPermission p = new PrincipalPermission(null, "User"); p.Demand(); //THIS RETURNS BOOL if (!User.IsInRole("User")) throw new SecurityException("Access is denied."); } } }
Schritt 4 – Implementieren der Anspruchstransformation mithilfe einer benutzerdefinierten Komponente "ClaimsAuthenticationManager"
Dieser Schritt ist optional. In diesem Schritt wird gezeigt, wie Ansprüche mithilfe des ClaimsAuthenticationManager transformiert werden, der Teil der WIF-Pipeline ist, die im Kontext der ASP.NET Anwendung ausgeführt wird, im Gegensatz zu den Anspruchstransformationsregeln, die in ACS ausgeführt werden, wie in Schritt 2 beschrieben – Konfigurieren von Rollenansprüchen im ACS.
So implementieren Sie die Anspruchstransformation mithilfe einer benutzerdefinierten Komponente "ClaimsAuthenticationManager"
Fügen Sie der Visual Studio-Projektmappe das Projekt Klassenbibliothek hinzu, und geben Sie ihm dann einen Namen, z. B. MyClaimsTransformationModule.
Fügen Sie einen Verweis auf die Assembly Microsoft.IdentityModel hinzu.
Fügen Sie einen Verweis auf die Assembly System.IdentityModel hinzu.
Erstellen Sie eine neue Klasse, und geben Sie ihr dann einen Namen, z. B. ClaimsTransformationModule.
Fügen Sie der Klasse die folgenden Deklarationen hinzu.
using Microsoft.IdentityModel.Claims; using System.Security.Principal;
Leiten Sie die Klasse vom Typ ClaimsAuthenticationManager ab.
Setzen Sie die Methode Authenticate außer Kraft (hier geschieht die Anspruchstransformation). Ihr Code für die Methode Authenticate kann auf dem folgenden Code basieren.
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true) { //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity; ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add( new Claim(ClaimTypes.Role, "Admin")); } return incomingPrincipal;
Wechseln Sie zur ASP.NET-Anwendung, und konfigurieren Sie dann Ihre benutzerdefinierte Komponente ClaimsAuthenticationManager in deren Datei web.config.
<microsoft.identityModel> <service> <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
Stellen Sie sicher, dass die neue Assembly, die Sie erstellt haben, von der Anwendung gefunden wird. Die einfachste Methode besteht darin, die Assembly im Ordner bin der Anwendung zu speichern.
Schritt 5 – Testen der Lösung
In diesem Schritt wird gezeigt, wie Sie bestätigen können, dass die Lösung funktioniert. Drücken Sie zum Testen Ihrer Lösung F5. Ihre ASP.NET-Webanwendung sollte im Debugmodus ausgeführt werden (Sie können Haltepunkte hinzufügen, um die Codeausführung in Visual Studio zu überprüfen). Zuerst sollten Sie auf die Authentifizierungsseite des Identitätsanbieters gelangen, der für den Verbund konfiguriert wurde. Nachdem die Authentifizierung abgeschlossen wurde, sollten Sie erneut an die Seite Default.aspx weitergeleitet werden, ohne dass eine Ausnahme ausgelöst wird. Dies bedeutet, dass alle Sicherheitsanforderungen für die Rolle User erfüllt wurden.