Support

Stellen Sie Fragen auf Stack Overflow und taggen Sie mit 'itfoxtec-identity-blazor'.

E-Mail an support@foxids.com mit einem Link zu Ihrer Frage.

Paket

Veröffentlichungen
NuGet ITfoxtec Identity Blazor WebAssembly OpenID Connect

Code und Lizenz

GitHub Code und Beispiel
Open-Source-Lizenz

ITfoxtec Identity Blazor WebAssembly OpenID Connect

ITfoxtec Identity Blazor WebAssembly OpenID Connect ist eine JavaScript freie OpenID Connect PKCE Bibliothek für Blazor WebAssembly.

Der Firmenname ITfoxtec wurde geändert zu FoxIDs aber die Komponenten behalten den ITfoxtec Namen vorerst als Teil des Komponentennamens bei.

Unterstützte .NET Versionen:

  • .NET 10.0
  • .NET 9.0
  • .NET 8.0
  • .NET 7.0
  • .NET 6.0
  • .NET 5.0

Die Bibliothek unterstützt Login und Logout mit OpenID Connect unter Verwendung von PKCE statt eines Client Secret. Sie validiert ID Tokens im Browser mit dem OpenID Provider Discovery Dokument.

Die Komponente verwaltet Token und Session Updates automatisch mit Refresh Tokens, wenn der offline_access Scope angegeben ist.

Bitte sehen Sie die Beispielanwendung.

Sie können das JWT Tool verwenden, um Tokens zu decodieren und mit dem Zertifikat Toolselbstsignierte Zertifikate zu erstellen.

Beispielanwendung

Bitte sehen Sie die Beispielanwendung für Implementierungsdetails.

Die Beispielanwendung ist so konfiguriert, dass sie sich mit foxids.com mit Testbenutzer test1@foxids.com oder test2@foxids.com und Passwort TestAccess!

Weitere Informationen zu den European Identity Services FoxIDs finden Sie in der FoxIDs Dokumentation.

Installieren

Installieren Sie das ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect NuGet Paket über den Visual Studio Paket Manager.

Oder installieren Sie über PowerShell mit folgendem Befehl.

Install-Package ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect

Oder über CLI.

dotnet add package ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect

Setup und Konfiguration

Registrieren Sie OpenidConnectPkce, HttpClient und IHttpClientFactory in der Program.cs Datei.

private static void ConfigureServices(IServiceCollection services, WebAssemblyHostConfiguration configuration, IWebAssemblyHostEnvironment hostEnvironment)
{
    services.AddHttpClient("BlazorWebAssemblyOidcSample.API", client => client.BaseAddress = new Uri(hostEnvironment.BaseAddress))
        .AddHttpMessageHandler<AccessTokenMessageHandler>();

    services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("BlazorWebAssemblyOidcSample.API"));

    services.AddOpenidConnectPkce(settings =>
    {
        configuration.Bind("IdentitySettings", settings);
    });
}

Fügen Sie appsettings.json und gegebenenfalls appsettings.Development.json Konfigurationsdateien unter wwwroot mit der IdentitySettings Konfiguration hinzu. Der Scope wird als durch Leerzeichen getrennte Liste von Werten hinzugefügt.

{
  "IdentitySettings": {
    "Authority": "https://...some authority.../",
    "ClientId": "...client id...",
    "Scope": "...some scope..."
  }
}

Fügen Sie den Bibliotheks Namespace @using ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect zu Imports.razor hinzu.

IdP Konfiguration

Konfigurieren Sie den Blazor Client als OpenID Connect Client beim IdP.

API Aufrufe zu einer anderen Domain

Die Konfiguration kann erweitert werden, um API Aufrufe zu anderen Domains als der Basisdomain zu unterstützen. Die vertrauenswürdigen AuthorizedUris in der IdentitySettings Konfiguration werden beim AccessTokenMessageHandler konfiguriert.

private static void ConfigureServices(IServiceCollection services, WebAssemblyHostConfiguration configuration, IWebAssemblyHostEnvironment hostEnvironment)
{
    services.AddHttpClient("BlazorWebAssemblyOidcSample.API", client => client.BaseAddress = new Uri(hostEnvironment.BaseAddress))
        .AddHttpMessageHandler(sp =>
        {
            var handler = sp.GetService<AccessTokenMessageHandler>();
            configuration.Bind("IdentitySettings", handler);
            return handler;
        });

    services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("BlazorWebAssemblyOidcSample.API"));

    services.AddOpenidConnectPkce(settings =>
    {
        configuration.Bind("IdentitySettings", settings);
    });
}

Fügen Sie vertrauenswürdige Domains als AuthorizedUris in der IdentitySettings Konfiguration hinzu.

{
  "IdentitySettings": {
    "Authority": "https://...some authority.../",
    "ClientId": "...client id...",
    "Scope": "...some scope...",
    "Resources": [ "...resource..." ],
    "AuthorizedUris": [ "...authorized api Uri..." ]
  }
}

Periodische Access Token Validierung

Setzen Sie SessionValidationIntervalSeconds in IdentitySettings (Standard ist 300; auf 0 setzen, um zu deaktivieren). Wenn aktiviert, OidcAuthenticationStateProvider ruft periodisch den UserInfo Endpoint über OidcHelper.ValidateAccessTokenWithUserInfoEndpoint. Wenn die Validierung fehlschlägt, leert der Provider die Sitzung und löst das Logout Ereignis aus, damit die UI den Benutzer erneut zur Anmeldung auffordert.

Call back Seite hinzufügen

Fügen Sie eine Authentication.razor Call back Seite im Pages Ordner mit folgendem Inhalt hinzu.

@page "/authentication/{action}"
@inherits AuthenticationPageBase

Authorize Views

Aktualisieren Sie App.razor, um AuthorizeRouteView/NotAuthorized mit dem OidcRedirectToLogin Element einzubinden. OidcRedirectToLogin startet den Login Flow, wenn der Benutzer keinen Zugriff hat.

<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
            <NotAuthorized>
                <OidcRedirectToLogin />
            </NotAuthorized>
            <Authorizing>
                <h1>Authentication in progress</h1>
                <p>Only visible while authentication is in progress.</p>
            </Authorizing>
        </AuthorizeRouteView>
    </Found>
    <NotFound>
        <CascadingAuthenticationState>
            <LayoutView Layout="@typeof(MainLayout)">
                <h1>Sorry</h1>
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </CascadingAuthenticationState>
    </NotFound>
</Router>

Damit werden sowohl das Authorize Attribut als auch AuthorizeView unterstützt.

Login / Logout Menü

Fügen Sie LoginDisplay.razor mit einem Login / Logout Menü mit folgendem Inhalt hinzu.

@inject OpenidConnectPkce oenidConnectPkce

<AuthorizeView>
    <Authorized>
        Hello, @context.User.Identity.Name!
        <button class="nav-link btn btn-link" @onclick="LogoutAsync">Logout</button>
    </Authorized>
    <NotAuthorized>
        <button class="nav-link btn btn-link" @onclick="LoginAsync">Login</button>
    </NotAuthorized>
</AuthorizeView>

@code{
    private async Task LoginAsync(MouseEventArgs args)
    {
        await oenidConnectPkce.LoginAsync();
    }

    private async Task LogoutAsync(MouseEventArgs args)
    {
        await oenidConnectPkce.LogoutAsync();
    }
}

LoginDisplay kann dem MainLayout.razor wie folgt hinzugefügt werden.

@inherits LayoutComponentBase

<div class="sidebar">
    <NavMenu />
</div>

<div class="main">
    <div class="top-row px-4">
        <LoginDisplay />
    </div>

    <div class="content px-4">
        @Body
    </div>
</div>

Ihre Privatsphäre

Wir verwenden Cookies, um Ihre Erfahrung auf unseren Websites zu verbessern. Klicken Sie auf 'Alle Cookies akzeptieren', um der Verwendung von Cookies zuzustimmen. Um nicht notwendige Cookies abzulehnen, klicken Sie auf 'Nur notwendige Cookies'.

Weitere Informationen finden Sie in unserer Datenschutzerklärung