web-dev-qa-db-ja.com

IdentityServer4を介してOpenId ConnectをASP.NET Core Server Side Blazor Webアプリに追加する方法

私は次のことを行いました(動作するはずですが動作しません)、リダイレクトなし、エラーなし、何もなし、認証なしでページを表示するだけですが、何が問題ですか?


ASP.NET Core 3.1 Blazor

ステップ1。インストールパッケージMicrosoft.AspNetCore.Authentication.OpenIdConnect

ステップ2。 Statup.csを編集

「ConfigurationServices」の下に追加

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
        {
           options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
           options.Authority = "http://localhost:5000";
           options.RequireHttpsMetadata = false; //false for development only
           options.ClientId = "mywebclient";
           options.ResponseType = "code";
           options.UsePkce = true;
           options.Scope.Add("profile");
           options.Scope.Add("offline_access");
           options.SaveTokens = true;
        });

「構成」の下に追加

        ...
        services.AddAuthorization();

        app.UseStaticFiles();

        app.UseRouting();


        app.UseAuthentication();
        app.UseAuthorization();

        ....

手順3。ブレザーページに属性Authorizeを追加

        @page "/item"
        @attribute [Authorize] 
2
001

認証なしでページを表示するだけですが、何が問題ですか

アプリにAuthorizeRouteViewを追加していない可能性があります。 @attribute [Authorize]は、そのページコンポーネントに[AuthorizeAttribute]を追加するディレクティブにすぎないことに注意してください。ルートの認証を有効にするには、次のことを行う必要があります。

  1. 最上位に<CascadingAuthenticationState>を追加する
  2. ルートの認証を有効にするには、<AuthorizeRouteView>を追加します。参照 公式ドキュメント
  3. プレーンなコンポーネント認証には<AuthorizeView>を使用します。承認されていないときにコンポーネントを表示するには、<NotAuthorized>を追加します。また、Authorizingを使用して、ユーザーの承認中にコンポーネントを表示します。参照 公式ドキュメント

たとえば、BlazorApp.razorは次のようになります。

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" >
                <NotAuthorized>
                    You're not allowed!
                </NotAuthorized>
                <Authorizing>
                    <h1>Authentication in progress</h1>
                </Authorizing>
            </AuthorizeRouteView>
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState>
0
itminus