.Net Core 8 Identity Web API с внешними входами (Google, Facebook)C#

Место общения программистов C#
Ответить
Anonymous
 .Net Core 8 Identity Web API с внешними входами (Google, Facebook)

Сообщение Anonymous »


Я столкнулся с проблемами при внедрении .NET Core Identity 8 в свой проект веб-API. Я следовал официальной документации, но столкнулся с проблемами при входе в Google. Я не знаю, в чем проблема. Возможно, это проблема с файлами cookie или что-то еще.
[*]Установлены необходимые пакеты NuGet для Identity 8. [*]Настроил службы идентификации в Program.cs. [*]Настройте мой DbContext и модели. [*]Реализована аутентификация Google.
Я проверил свои конфигурации и внимательно изучил документацию, но не смог понять, что может быть причиной этой проблемы. Может ли кто-нибудь подсказать мне или указать правильное направление для решения этой проблемы?

Вот фрагменты моего кода для справки:

Файл Program.cs

с использованием System.Security.Claims; использование System.Security.Cryptography; использование Core8IdentityWEBAPI.Controllers; использование Core8IdentityWEBAPI.Data; использование Microsoft.AspNetCore.Authentication; использование Microsoft.AspNetCore.Authentication.Cookies; использование Microsoft.AspNetCore.Authentication.Google; использование Microsoft.AspNetCore.Builder; использование Microsoft.AspNetCore.Hosting; использование Microsoft.AspNetCore.Identity; использование Microsoft.EntityFrameworkCore; использование Microsoft.Extensions.Options; использование Microsoft.IdentityModel.Tokens; использование Microsoft.OpenApi.Models; использование Swashbuckle.AspNetCore.Filters; вар строитель = WebApplication.CreateBuilder(args); вар услуги = builder.Services; конфигурация вар = builder.Configuration; // Добавляем сервисы в контейнер. builder.Services.AddControllers(); // Узнайте больше о настройке Swagger/OpenAPI по адресу https://aka.ms/aspnetcore/swashbuckle. builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(параметры => { options.AddSecurityDefinition("oauth2", новая OpenApiSecurityScheme { В = МестоположениеПараметра.Заголовок, Имя = "Авторизация", Тип = SecuritySchemeType.ApiKey }); options.OperationFilter(); }); builder.Services.AddDbContext(параметры => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddAuthorization(); builder.Services.AddDistributedMemoryCache(); // Добавить сеанс //builder.Services.AddSession(опции => //{ // options.IdleTimeout = TimeSpan.FromMinutes(30); //Здесь устанавливаем время // options.Cookie.HttpOnly = true; // options.Cookie.IsEssential = true; //}); // Добавляем CORS Services.AddCors(опции => { options.AddPolicy("AllowAnyOrigin", builder => { строитель.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); builder.Services.AddIdentityApiEndpoints() .AddEntityFrameworkStores(); builder.Services.AddAuthentication(auth => { auth.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; auth.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; auth.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddCookie(опции => { options.AccessDeniedPath = "/login"; options.ExpireTimeSpan = TimeSpan.FromDays(30); options.LoginPath = "/login"; options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter; options.SlidingExpiration = true; options.ExpireTimeSpan = TimeSpan.FromDays(30); // Устанавливаем режим SameSite на Lax options.Cookie.SameSite = SameSiteMode.Lax; }) .AddGoogle(googleOptions => { googleOptions.ClientId = builder.Configuration.GetSection("Аутентификация:Google:ClientId").Value; googleOptions.ClientSecret = builder.Configuration.GetSection("Аутентификация:Google:ClientSecret").Value; googleOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; //googleOptions.CallbackPath = "/api/Auth/GoogleResponse"; // Устанавливаем путь обратного вызова googleOptions.CallbackPath = "/signin-google"; // Устанавливаем путь обратного вызова }) .AddFacebook(facebookOptions => { facebookOptions.AppId = builder.Configuration.GetSection("Аутентификация:Facebook:AppId").Value; facebookOptions.AppSecret = builder.Configuration.GetSection("Аутентификация:Facebook:AppSecret").Value; facebookOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; }); вар приложение = builder.Build(); // Настраиваем конвейер HTTP-запросов. если (app.Environment.IsDevelopment()) { приложение.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Ваш API V1"); // Другие параметры конфигурации... }); } app.UseDeveloperExceptionPage(); app.MapIdentityApi(); app.UseHttpsRedirection(); приложение.UseRouting(); app.UseCors(builder => { строитель.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); //app.UseSession(); приложение.UseAuthentication(); приложение.UseAuthorization(); var cookiePolicyOptions = новые CookiePolicyOptions { МинимумSameSitePolicy = SameSiteMode.Lax, HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.Always, Безопасный = CookieSecurePolicy.Always, }; /*Использовать политику использования файлов cookie*/ app.UseCookiePolicy(cookiePolicyOptions); приложение.MapControllers(); приложение.Выполнить(); Метод AuthController

[HttpGet] общедоступная асинхронная задача GoogleLogin([FromServices] IDistributedCacheраспределенныйCache) { // Генерируем уникальное значение состояния // состояние var = Guid.NewGuid().ToString(); //// Сохраняем значение состояния в распределенном кеше //varcacheKey = $"GoogleAuthenticationState:{state}"; //ждем DistributedCache.SetStringAsync(cacheKey, «действительный», новый DistributedCacheEntryOptions //{ // AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) // Устанавливаем срок действия //}); await HttpContext.ChallengeAsync("Google", new AuthenticationProperties() { //RedirectUri = Url.Action("GoogleResponse", "Auth", null, Request.Scheme), RedirectUri = "/signin-google" }); //_logger.LogInformation($"Обратный вызов отправлен. Состояние: {state}"); var googleAuthUrl = HttpContext.Response.Headers["Местоположение"]; // Возвращаем URL в качестве ответа return Ok(new {GoogleAuthUrl = googleAuthUrl}); } Будем очень признательны за любую помощь или предложения. Заранее спасибо!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»