Опитвам се да добавя удостоверяване на Google към моето сървърно приложение Blazor и не мога да го накарам да работи на моя локален хост. Когато щракна върху бутона Вход, той ме отвежда до инструмента за избор на акаунти в Google, където избирам акаунт, който да използвам за влизане. След като избера акаунт, той се връща към моята страница за вход в локален хост, където OnGetCallbackAsync показва, че GoogleUser.IsAuthenticated е невярно.
По-долу е Startup.cs
namespace RecruitmentApp{public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// Този метод се извиква от средата за изпълнение. Използвайте този метод, за да добавите услуги към контейнера.// За повече информация как да конфигурирате вашето приложение, посетете https://go.microsoft.com/fwlink/?LinkID=398940public void ConfigureServices(IServiceCollection services){services.AddDbContext( options =>options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));//options.UseSqlite("DataSource=app.db"));services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = false ).AddEntityFrameworkStores();services.AddRazorPages();services.AddServerSideBlazor();services.AddScoped>();services.AddSingleton();services.AddAuthentication().AddGoogle(options =>{options.ClientId = Configuration[ "Authentication:Google:ClientId"];options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];options.ClaimActions.MapJsonKey("urn:google:profile", "link");options.ClaimActions.MapJsonKey(" urn:google:image", "picture");});// От: https://github.com/aspnet/Blazor/issues/1554// Добавя HttpContextAccessor// Използва се за определяне дали даден потребител е влязъл/ / и какво е тяхното потребителско имеservices.AddHttpContextAccessor();services.AddScoped();// Изисква се за поддръжка на HttpClient в проекта Blazor Clientservices.AddHttpClient();services.AddScoped();// Предаване на настройки към други компонентиservices.AddSingleton(Configuration );}// Този метод се извиква от средата за изпълнение. Използвайте този метод, за да конфигурирате HTTP заявката pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseDatabaseErrorPage();}else{app.UseExceptionHandler(" /Грешка");// Стойността на HSTS по подразбиране е 30 дни. Може да искате да промените това за производствени сценарии, вижте https://aka.ms/aspnetcore-hsts.app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();// app.UseCookiePolicy();app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();endpoints.MapBlazorHub();endpoints.MapFallbackToPage("/_Host");} );}}}И тук е кодът в Login.cshtml.cs, където се показва проблемът.
namespace RecruitmentApp.Pages{[AllowAnonymous]public class LoginModel : PageModel{public IActionResult OnGetAsync(string returnUrl = null){string provider = "Google";// Поискайте пренасочване към външния доставчик за влизане.var authenticationProperties = new AuthenticationProperties{RedirectUri = Url.Page("./Login",pageHandler: "Callback",values: new { returnUrl }),};return new ChallengeResult(provider, authenticationProperties);}public async Task OnGetCallbackAsync(string returnUrl = null, string remoteError = null ){// Вземете информацията за потребителя от външния доставчик на данни за влизане var GoogleUser = this.User.Identities.FirstOrDefault();// -----> !!! ПРОБЛЕМ GoogleUser.IsAuthenticated връща false!!!!if (GoogleUser.IsAuthenticated){var authProperties = new AuthenticationProperties{IsPersistent = true,RedirectUri = this.Request.Host.Value};await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new Claim sПринципал (GoogleUser), authProperties);}return LocalRedirect("/");}}}В console.developers.google.com клиентски идентификатор OAuth 2.0 е настроен с типа „Уеб приложение“, като ClientID и Secret са добавени към файла secrets.json на проекта.
Идентификаторът на OAuth клиент е редактиран със следните разрешени URI адреси за пренасочване:
https://localhost:44319/Loginhttps://localhost:44319/signin-google
Не виждам какво не е наред защо връща GoogleUser.IsAuthenticated = false след избора на потребителя на Google. Някакви идеи?
PREV: Хостинг на собствен уеб сървър у дома - The Silicon Underground
NEXT: Как да преместите жив WordPress сайт на локален сървър