You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:54:30