Blazor Servere でEasy Authのログイン情報を取得する

Easy Auth = Azure Service Authentication に設定できるIDプロバイダの選択肢が増えています。AppleのIDも使えます。もうほとんどの人をカバーできるのではないでしょうか。独自のユーザーDBがある既存システムでなければ、基本Easy Authを使うという方針でも良い気がします。

BlazorServerを配置したApp Serviceにも設定してみます。無事、/.auth/login/aad でMicrosoftアカウントでログインできました。ですが、アプリのLoginバーにログインIDが表示されません。IsAuthenticatedにもなっていないようです。そりゃまあ、きっとなにかコードの追加は必要でしょう!いったい何が不足しているの?からが長かったです。公式の説明 ASP.NET Core Blazor の認証と承認 を読んでみますが、MSさんのドキュメントは相変わらず難しいです。タイトルからここに書いてあるはず!とは思いますが、一体何の説明??と、すぐ迷子になります;

とにかく、App.razorをCascadingAuthenticationStateタグで囲う版に修正して、CascadeAuthState.razorとClaimsPrincipalData.razorを追加してみます。迷うのは、Program.csに何か追加する必要があるかないか?です。AuthenticationStateProviderが主役のようなので、これをIocに登録するコードが必要な気もしますが、今回(EasyAuthを使う)のパターンだとだとカスタムのAuthenticationStateProviderは不要なので何も追加する必要はないようです。実際、ClaimsPrincipalData.razorでのinjectは成功するので、カスタムAuthenticationStateProviderでない場合は、登録は必要なくて、暗黙のうちに組み込みのAuthenticationStateProviderが使用されるようです。というあたりの説明もぼんやりしている気がします。

愚痴ついでに、app.UseAuthentication や app.UseAuthorization も、これが必要なのかどうかよくわかっていません。でもなんとなく、今回のパターン(Blazor & Easy Auth)ではいらない気がしています。なんとなくです。 さて困りました。こうゆうときのchatGPTでしょ!聞いてみました。すごく期待できそうな返事がきました。が、進展はありませんでした。今回のパターンではハズレのようです。つまり、この件については絶対的に情報が不足しているのでしょう。あまり流行ってないのでしょうかp

いつものようにWebを彷徨って、どうもASP.NET Core の場合はClaimsPrincipalが自動でセットされないという情報が見つかりました。しかし、Core2やCore3の頃の記事なので、.NET6で変わっているのかどうかは不明のままです。また、.NET4.6では不要なのに.NET Coreだとなぜカスタムコードが必要になるのか?もよくわかりません。とにかく、古い記事の、Easy Authの.NET Core対応を追加したころ、問題なくログインユーザー名を取得できました。たぶん、.NET6や7でも、このワナは健在している気がします。

ということで、今回も認証=Authenticationっていったいなんのこと?に、ずっぽり悩んでしまいました。useAuthenticationや、addAuthenticationと言っても、そのAuthenticationは、今頭の中にあるこのAuthenticationとは違う別のなにかを指していることがあるということはしっかり刻んでおこうと思います。

登録:2023-03-15 09:00
更新:2023-03-15 09:56
by nasu38yen
Copyright (C) 2014 Stadio Peace All Rights Reserved.