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

SwaggerUI集成Google登录后User.Identity字段为空求助

问题:Swagger集成Google登录后控制器中User.Identity字段为空

我正在构建一个可通过Swagger交互的无头API(headless API),已成功通过Swagger的Authorize按钮集成Google登录,能看到Swagger为所有请求附加Bearer令牌,但在控制器中查看User.Identity时所有字段均为空。我希望将用户管理交由Google负责,仅使用Google的公开资料信息。以下是Program.cs代码及相关截图,恳请提供帮助。

Program.cs代码

using DataAccess.EFCore;
using DataAccess.EFCore.Repositories;
using Domain.Interfaces;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using System.Reflection;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContextPool<MyDBContext>(options =>
    options.UseSqlServer(
        builder.Configuration.GetConnectionString("MyDB"),
        options => options.MigrationsAssembly(typeof(MyDBContext).Assembly.FullName)
    )
);

builder.Services.AddTransient(typeof(IRepository<>), typeof(Repository<>));
builder.Services.AddTransient<IUserRepository, UserRepository>();

builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<MyDBContext>()
    .AddDefaultTokenProviders();

builder.Services.AddControllers();

builder.Services.AddAuthentication()
    .AddGoogle(options =>
    {
        options.ClientId = builder.Configuration["GoogleOAuth:ClientId"];
        options.ClientSecret = builder.Configuration["GoogleOAuth:ClientSecret"];
        options.SignInScheme = IdentityConstants.ExternalScheme;
    });

builder.Services.AddSwaggerGen(swagger =>
{
    swagger.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "MyAPI",
        Description = "MyAPI"
    });

    var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    swagger.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));

    swagger.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Flows = new OpenApiOAuthFlows
        {
            Implicit = new OpenApiOAuthFlow
            {
                AuthorizationUrl = new Uri("https://accounts.google.com/o/oauth2/v2/auth"),
                Scopes = new Dictionary<string, string> { { "https://www.googleapis.com/auth/userinfo.email", "email" }, { "https://www.googleapis.com/auth/userinfo.profile", "profile" } }
            },
        }
    });

    swagger.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "oauth2"
                }
            },
            new List<string>{"email", "profile"}
        }
    });
});

var app = builder.Build();

app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI(options =>
    {
        options.DisplayRequestDuration();
        options.RoutePrefix = string.Empty;
        options.SwaggerEndpoint("swagger/v1/swagger.json", "MyAPI V1");
        options.OAuthClientId(builder.Configuration["GoogleOAuth:ClientId"]);
        options.OAuthClientSecret(builder.Configuration["GoogleOAuth:ClientSecret"]);
        options.OAuthAppName("MyAPI");
    });
    app.UseDeveloperExceptionPage();
} 
else
{
    app.UseHsts();
}

app.MapControllers();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();

app.Run();

相关截图

  • 截图1:截图1
  • 截图2:截图2
  • 截图3:截图3
  • 截图4:截图4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:16