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

如何在Blazor WASM OIDC认证中禁用userinfo端点

解决Blazor WASM OIDC禁用/userinfo端点调用的问题

要禁用OIDC认证流程中的/userinfo调用,最可靠的方式是自定义OidcUserService,替换默认实现来跳过该请求。默认的OidcUserService会在获取token后自动调用/userinfo端点,我们可以重写它的逻辑,直接从id_token中解析用户信息。

步骤1:创建自定义OidcUserService

实现一个继承自OidcUserService<RemoteUserAccount>的类,重写GetUserAsync方法,跳过/userinfo调用,直接解析id_token中的声明:

using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using System.IdentityModel.Tokens.Jwt;

public class CustomOidcUserService : OidcUserService<RemoteUserAccount>
{
    public CustomOidcUserService(IOidcConfigurationProvider configurationProvider, HttpClient httpClient) 
        : base(configurationProvider, httpClient)
    {
    }

    public override Task<RemoteUserAccount> GetUserAsync(OpenIdConnectMessage message, CancellationToken cancellationToken)
    {
        var account = new RemoteUserAccount();
        
        // 直接解析id_token中的所有声明
        if (JwtSecurityTokenHandler.CanReadToken(message.IdToken))
        {
            var jwtToken = new JwtSecurityToken(message.IdToken);
            account.AdditionalProperties = jwtToken.Claims
                .ToDictionary(claim => claim.Type, claim => (object)claim.Value);
        }

        return Task.FromResult(account);
    }
}

步骤2:注册自定义服务

在Program.cs中替换默认的IOidcUserService实现,同时保留原有的OIDC配置:

builder.Services.AddOidcAuthentication(options =>
{
    options.ProviderOptions.DefaultScopes.Clear();
    builder.Configuration.Bind("Oidc", options.ProviderOptions);
})
.AddAccountClaimsPrincipalFactory<RemoteUserAccount, CustomUserClaimsPrincipalFactory>();

// 替换默认的OidcUserService为自定义实现
builder.Services.Replace(ServiceDescriptor.Scoped<IOidcUserService, CustomOidcUserService>());

注意事项

  • 确保生产环境返回的id_token已包含所有你需要的用户声明,因为跳过/userinfo后,只能从id_token中获取用户信息。可以通过解码id_token检查payload里的内容。
  • 如果生产环境的id_token没有包含必要声明,需要和对方确认是否可以在id_token中添加,或者调整自定义逻辑(比如添加/userinfo调用的错误处理,忽略调用失败的情况)。

内容的提问来源于stack exchange,提问作者Branimir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:52:38