3

ApiAuthenticationStateProviderを返した後AuthenticationStateもまだ述べているカスタムを作成しました

info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
      Authorization failed.

ApiAuthenticationStateProviderこれは失敗している私の簡略化されたバージョンです:

public class ApiAuthenticationStateProvider : AuthenticationStateProvider
{
   public override Task<AuthenticationState> GetAuthenticationStateAsync()
   {
       Console.WriteLine("Getting auth state...");
               
       var claims = new[] { new Claim(ClaimTypes.Name, "some.email@somewhere.com") };
       var authenticatedUser = new ClaimsPrincipal(new ClaimsIdentity(claims));
       var authState = Task.FromResult(new AuthenticationState(authenticatedUser));

       return Task.FromResult(authState);
   }
}

カスタム プロバイダーを使用していることがわかりConsole.WriteLineますが、完全な詳細を提供するために、これを に追加するために使用したコードを次に示しますProgram.cs

builder.Services.AddScoped<AuthenticationStateProvider, ApiAuthenticationStateProvider>();

4

3 に答える 3

3

問題はこの回答で解決できます。 https://stackoverflow.com/a/20254797/2682662

基本的に を作成するときClaimsIdentityは、認証タイプに文字列値を指定する必要があります。

var authenticatedUser = new ClaimsPrincipal(new ClaimsIdentity(claims, "Needs Auth Type Here"));
于 2020-07-08T15:16:04.120 に答える
2

これを Blazor で機能させるには、authenticationTypeパラメーター値を追加する必要がClaimsIdentityあるため、コードは次のように変更されます。

public class ApiAuthenticationStateProvider : AuthenticationStateProvider
{
   public override Task<AuthenticationState> GetAuthenticationStateAsync()
   {
       Console.WriteLine("Getting auth state...");
               
       var claims = new[] { new Claim(ClaimTypes.Name, "some.email@somewhere.com") };
       var authenticatedUser = new ClaimsPrincipal(new ClaimsIdentity(claims, AuthenticationTypes.Password));
       var authState = Task.FromResult(new AuthenticationState(authenticatedUser));

       return Task.FromResult(authState);
   }
}

ClaimsIdentityAuthenticationTypes.Passwordパラメーターに注意してください。

ClaimsIdentityこれは、が構築されているすべての場所で同じである必要があります。

更新:このコメントに よると、認証タイプの値はAuthenticationTypesclassで定義された値の 1 つである必要があります。ランダムな認証タイプ名の代わりにこのクラスを使用するように上記のコードを更新しました。

于 2020-07-08T15:16:18.337 に答える