私はBlazor Webアセンブリを使用してアプリを開発しようとしています、そして私はユーザーが認証されていない場合、私がアプリケーション全体を保護する方法について疑問に思います。実装する行動は次のとおりです。
より良い
現時点では、この現象をすべてのページに[Authorize]
属性を適用していますが、集中化したいと思います。
この目標をBlazor Server Sideでは、[Authorize]
コンポーネント内の_Host.razor
属性を適用しました。
Blazorクライアント側でも解決策はありますか?
基本的にBlazorapp.Clientのすべてのページへの許可を適用するには、追加する必要があります。
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
_
...あなたの_imports.razorファイルに。
さらに、追加できます。
@attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]
_
...権限を必要としないページについて。
また、ユーザーを任意のページにリダイレクトしたい場合は、ここに私が思い付いたものです。
<NotAuthorized>
@if (true) { navMan.NavigateTo("login"); }
</NotAuthorized>
_
... NAVMANがNavigationManagerの注入されたインスタンスです。ここでは、許可されたユーザーのみのページにアクセスしようとすると、ユーザーをlogin.razorにリダイレクトしています。
私は@Brettから解決策を試してみましたが、それは働いたページに戻りましたが、ユーザーはAuthorizing...
、Checking login state...
と言った後、ついにCompleting login...
と言ってそこに立ち往生しました。その後、ユーザーはリンクをクリックするか、手動で前のURLを手動で入力して戻って戻る必要がありました。
Microsoftは "のドキュメントを持っています(== --- ==)アプリ全体の許可が必要です"。
ドキュメントによると:
_Imports.razor
ファイルのauthorize属性指令を使用します。@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]
コードを_Imports.razor
に追加しましたが、コンテンツの白い画面しか受け取っただけです。
その後、https://localhost:44123/authentication/login
もShared\RedirectToLogin.razor
が正常に指しているホワイト画面を私に与えたことに気づいた。その後、@attribute [AllowAnonymous]
をPages\Authentication.razor
を追加し、それからすべてが期待どおりに機能し、立ち往生しませんでした。
この解決策では、デフォルトのYou are logged out.
メッセージも表示できます。
_<NotAuthorizedContent>
_コンポーネントとして_<Router>
_テンプレートを活用することができます ここに記載されています :
_<CascadingAuthenticationState>
<Router AppAssembly="typeof(Startup).Assembly">
<NotFoundContent>
<p>Sorry, there's nothing at this address.</p>
</NotFoundContent>
<NotAuthorizedContent>
<h1>Sorry</h1>
<p>You're not authorized to reach this page. You may need to log in as a different user.</p>
</NotAuthorizedContent>
<AuthorizingContent>
<p>Please wait...</p>
</AuthorizingContent>
</Router>
</CascadingAuthenticationState>
_
RedirectToLogin
のようなOnInitializedAsync
のようなものと呼ばれる_<NotAuthorizedContent>
_の内容を置き換え、ユーザーがログインしているかどうかをチェックし、そうでない場合はリダイレクトを行います。
私の旅行では、Blazorに精通しています。すべてがBlazorのコンポーネントのように思われるので、あなたのログインページも同様にコンポーネントです。それは少なくともチュートリアルでです。だから彼がすることはすべてこれだけです:
<NotAuthorized>
<Login />
</NotAuthorized>
_
そして、もちろんあなたのログインコンポーネントに正しいものを追加する必要があります。
このソリューションの下側は、URLがログインしていないときに表示されているページと一致しないことです。