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:

- 截图2:

- 截图3:

- 截图4:

内容的提问来源于stack exchange,提问作者Izak Joubert
相关产品推荐
相关产品推荐

