Razor Pages-Autorisierungskonventionen in ASP.NET Core

Eine Möglichkeit zum Steuern des Zugriffs in Ihrer Razor Pages-App ist die Verwendung von Autorisierungskonventionen beim Start. Diese Konventionen ermöglichen Ihnen, Benutzer*innen zu autorisieren und anonymen Benutzer*innen den Zugriff auf einzelne Seiten oder Ordner mit Seiten zu ermöglichen. Die in diesem Thema beschriebenen Konventionen wenden automatisch Autorisierungsfilter an, um den Zugriff zu steuern.

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)

Die Beispiel-App verwendet die cookie-Authentifizierung ohne ASP.NET Core Identity. Die in diesem Thema gezeigten Konzepte und Beispiele gelten aber genauso für Apps, die ASP.NET Core Identity verwenden. Um ASP.NET Core Identity zu verwenden, befolgen Sie den Leitfaden unter Einführung in Identity in ASP.NET Core.

Anfordern der Autorisierung für den Zugriff auf eine Seite

Verwenden Sie die AuthorizePage-Konvention, um der Seite unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages ohne Erweiterung, der nur Schrägstriche enthält.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizePage-Überladung:

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Hinweis

Ein AuthorizeFilter kann mit dem [Authorize]-Filterattribut auf eine Seitenmodellklasse angewandt werden. Weitere Informationen finden Sie unter Autorisieren eines Filterattributs.

Anfordern einer Autorisierung für den Zugriff auf einen Ordner mit Seiten

Verwenden Sie die AuthorizeFolder-Konvention, um allen Seiten in einem Ordner unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeFolder-Überladung:

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Anfordern der Autorisierung für den Zugriff auf eine Bereichsseite

Verwenden Sie die AuthorizeAreaPage-Konvention, um der Bereichsseite unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Der Seitenname ist der Pfad der Datei ohne Erweiterung relativ zum Seitenstammverzeichnis für den angegebenen Bereich. Der Seitenname für die Datei Areas/Identity/Pages/Manage/Accounts.cshtml lautet beispielsweise /Manage/Accounts.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeAreaPage-Überladung:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Anfordern einer Autorisierung für den Zugriff auf einen Ordner mit Bereichen

Verwenden Sie die AuthorizeAreaFolder-Konvention, um allen Bereichen in einem Ordner unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Der Ordnerpfad ist relativ zum Stammverzeichnis der Seiten für den angegebenen Bereich. Der Ordnerpfad für die Dateien unter Areas/Identity/Pages/Manage/ lautet z. B. /Manage.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeAreaFolder-Überladung:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Zulassen des anonymen Zugriffs auf eine Seite

Verwenden Sie die AllowAnonymousToPage-Konvention, um einer Seite unter dem angegebenen Pfad einen AllowAnonymousFilter hinzuzufügen:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages ohne Erweiterung, der nur Schrägstriche enthält.

Zulassen des anonymen Zugriffs auf einen Ordner mit Seiten

Verwenden Sie die AllowAnonymousToFolder-Konvention, um allen Seiten in einem Ordner unter dem angegebenen Pfad einen AllowAnonymousFilter hinzuzufügen:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages.

Hinweis zur Kombination von autorisiertem und anonymem Zugriff

Es ist zulässig anzugeben, dass ein Ordner mit Seiten eine Autorisierung erfordert, und gleichzeitig anzugeben, dass eine Seite in diesem Ordner anonymen Zugriff zulässt:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

Umgekehrt ist dies jedoch nicht möglich. Sie können keinen Ordner mit Seiten für den anonymen Zugriff deklarieren und dann eine Seite in diesem Ordner angeben, die eine Autorisierung erfordert:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

Beim Anfordern der Autorisierung auf der privaten Seite tritt ein Fehler auf. Wenn der AllowAnonymousFilter und der AuthorizeFilter auf die Seite angewandt werden, hat der AllowAnonymousFilter Vorrang und steuert den Zugriff.

Zusätzliche Ressourcen

Eine Möglichkeit zum Steuern des Zugriffs in Ihrer Razor Pages-App ist die Verwendung von Autorisierungskonventionen beim Start. Diese Konventionen ermöglichen Ihnen, Benutzer*innen zu autorisieren und anonymen Benutzer*innen den Zugriff auf einzelne Seiten oder Ordner mit Seiten zu ermöglichen. Die in diesem Thema beschriebenen Konventionen wenden automatisch Autorisierungsfilter an, um den Zugriff zu steuern.

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)

Die Beispiel-App verwendet die cookie-Authentifizierung ohne ASP.NET Core Identity. Die in diesem Thema gezeigten Konzepte und Beispiele gelten aber genauso für Apps, die ASP.NET Core Identity verwenden. Um ASP.NET Core Identity zu verwenden, befolgen Sie den Leitfaden unter Einführung in Identity in ASP.NET Core.

Anfordern der Autorisierung für den Zugriff auf eine Seite

Verwenden Sie die AuthorizePage-Konvention über AddRazorPagesOptions, um der Seite unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages ohne Erweiterung, der nur Schrägstriche enthält.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizePage-Überladung:

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Hinweis

Ein AuthorizeFilter kann mit dem [Authorize]-Filterattribut auf eine Seitenmodellklasse angewandt werden. Weitere Informationen finden Sie unter Autorisieren eines Filterattributs.

Anfordern einer Autorisierung für den Zugriff auf einen Ordner mit Seiten

Verwenden Sie die AuthorizeFolder-Konvention über AddRazorPagesOptions, um allen Seiten in einem Ordner unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeFolder-Überladung:

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Anfordern der Autorisierung für den Zugriff auf eine Bereichsseite

Verwenden Sie die AuthorizeAreaPage-Konvention über AddRazorPagesOptions, um der Bereichsseite unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Der Seitenname ist der Pfad der Datei ohne Erweiterung relativ zum Seitenstammverzeichnis für den angegebenen Bereich. Der Seitenname für die Datei Areas/Identity/Pages/Manage/Accounts.cshtml lautet beispielsweise /Manage/Accounts.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeAreaPage-Überladung:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Anfordern einer Autorisierung für den Zugriff auf einen Ordner mit Bereichen

Verwenden Sie die AuthorizeAreaFolder-Konvention über AddRazorPagesOptions, um allen Bereichen in einem Ordner unter dem angegebenen Pfad einen AuthorizeFilter hinzuzufügen:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Der Ordnerpfad ist relativ zum Stammverzeichnis der Seiten für den angegebenen Bereich. Der Ordnerpfad für die Dateien unter Areas/Identity/Pages/Manage/ lautet z. B. /Manage.

Verwenden Sie zum Angeben einer Autorisierungsrichtlinie eine AuthorizeAreaFolder-Überladung:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Zulassen des anonymen Zugriffs auf eine Seite

Verwenden Sie die AllowAnonymousToPage-Konvention über AddRazorPagesOptions, um einer Seite unter dem angegebenen Pfad einen AllowAnonymousFilter hinzuzufügen:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages ohne Erweiterung, der nur Schrägstriche enthält.

Zulassen des anonymen Zugriffs auf einen Ordner mit Seiten

Verwenden Sie die AllowAnonymousToFolder-Konvention über AddRazorPagesOptions, um allen Seiten in einem Ordner unter dem angegebenen Pfad einen AllowAnonymousFilter hinzuzufügen:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Der angegebene Pfad ist der Pfad der Anzeige-Engine. Dabei handelt es sich um den relativen Stammpfad von Razor Pages.

Hinweis zur Kombination von autorisiertem und anonymem Zugriff

Es ist zulässig anzugeben, dass ein Ordner mit Seiten eine Autorisierung erfordert, und gleichzeitig anzugeben, dass eine Seite in diesem Ordner anonymen Zugriff zulässt:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

Umgekehrt ist dies jedoch nicht möglich. Sie können keinen Ordner mit Seiten für den anonymen Zugriff deklarieren und dann eine Seite in diesem Ordner angeben, die eine Autorisierung erfordert:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

Beim Anfordern der Autorisierung auf der privaten Seite tritt ein Fehler auf. Wenn der AllowAnonymousFilter und der AuthorizeFilter auf die Seite angewandt werden, hat der AllowAnonymousFilter Vorrang und steuert den Zugriff.

Zusätzliche Ressourcen