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

.NET 5.0 Web API配置Google认证时报服务无法构建错误如何解决

问题根因

你遇到的报错完全是services.AddIdentity<IdentityUser, IdentityRole>()这行代码导致的。ASP.NET Core Identity是一套完整的身份认证框架,默认依赖IUserStore<IdentityUser>、IRoleStore<IdentityRole>等存储接口的实现,这类实现通常需要搭配EF Core对接数据库注册,你不需要用数据库做认证,根本不需要引入Identity整套服务。

修复方案

直接删掉ConfigureServices方法里的services.AddIdentity<IdentityUser, IdentityRole>();这行代码即可解决依赖缺失的报错。
如果需要保留Google OAuth认证后的登录态、自定义Claims处理逻辑,可参考以下调整后的配置:

using System.Security.Claims;
using System.Threading.Tasks;
// 其余using保留你原有内容即可

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options =>
    {
        // 认证成功后身份信息默认存Cookie
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
    })
    .AddCookie("Cookies")
    .AddGoogle(options =>
    {
        var clientSecret = new ConfigurationBuilder().AddJsonFile("Resources\\client_secret.json", optional: false, reloadOnChange: false).Build();
        options.ClientId = clientSecret.GetSection("installed:client_id").Value;
        options.ClientSecret = clientSecret.GetSection("installed:client_secret").Value;
        // 自定义处理Google返回的Claims
        options.Events.OnCreatingTicket = context =>
        {
            // 示例:获取Google返回的用户信息
            var userEmail = context.Principal.FindFirstValue(ClaimTypes.Email);
            var userId = context.Principal.FindFirstValue(ClaimTypes.NameIdentifier);
            // 你自己的自定义认证逻辑可写在这里
            return Task.CompletedTask;
        };
    });
    services.AddControllers();
}
验证说明

你现有的Configure方法中中间件顺序UseRouting→UseAuthentication→UseEndpoints是正确的,无需调整。修改后启动项目即可正常触发Google OAuth流程,认证成功后可以在接口中通过HttpContext.User拿到所有Claims信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:48:03