Blazor WASM应用中同时支持EntraID与自定义JWT双认证的实现问题咨询
Blazor WASM应用中同时支持EntraID与自定义JWT双认证的实现问题咨询
我想在Blazor WASM应用里同时支持EntraID认证和自定义JWT认证,让用户自己选择登录方式,这可行吗?
当我已经把EntraID的认证方案跑通后,再添加一个自定义的AuthenticationStateProvider实现来存储用户登录状态时,应用就没法通过EntraID登录了,还会抛出以下异常:
System.InvalidCastException: Specified cast is not valid.
at Microsoft.Extensions.DependencyInjection.WebAssemblyAuthenticationServiceCollectionExtensions.<>c__11[[Microsoft.AspNetCore.Components.WebAssembly.Authentication.RemoteAuthenticationState, Microsoft.AspNetCore.Components.WebAssembly.Authentication...
我的自定义认证类代码如下:
public class ApiAuthStateProvider(AppStatus appStatus) : AuthenticationStateProvider { private readonly AppStatus _appStatus = appStatus; public async override Task<AuthenticationState> GetAuthenticationStateAsync() { return await Task.FromResult(CreateState()); } public void StateChanged() { var authState = Task.FromResult(CreateState()); NotifyAuthenticationStateChanged(authState); } private AuthenticationState CreateState() { if (!_appStatus.UserLogged) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); else { var claims = new List<Claim> { new(ClaimTypes.Name, _appStatus.UserName ?? string.Empty) }; claims.AddRange(_appStatus.UserRoles.Select(_ => new Claim(ClaimTypes.Role, _.ToString()))); var anonymous = new ClaimsIdentity(claims, "Token"); return new AuthenticationState(new ClaimsPrincipal(anonymous)); } } }
有没有办法让这两种认证方式同时正常工作呢?
备注:内容来源于stack exchange,提问作者Val
相关产品推荐
相关产品推荐

