4

Начиная играть с AspNetCore.Identity, но не может запустить простой пример, всегда получает такое исключение: Произошлоаутентификация Google в AspNetCore.Identity

необработанного исключения при обработке запроса. InvalidOperationException: Нет обработчика аутентификации не настроен на обрабатывать схему: Google

Startup.cs

public void ConfigureServices(IServiceCollection services) 
    { 
     // EF services 
     services.AddEntityFramework() 
      .AddEntityFrameworkSqlServer() 
      .AddDbContext<MyContext>(); 

     // Identity services 
     services.AddIdentity<IdentityUser, IdentityRole>() 
      .AddEntityFrameworkStores<MyContext>() 
      .AddDefaultTokenProviders(); 

     // MVC services 
     services.AddMvc().AddJsonOptions(options => { 
      options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; 
      options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
      options.SerializerSettings.Converters = new JsonConverter[] { new StringEnumConverter(), new IsoDateTimeConverter() }; 
     }); 

Configure.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(); 

     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
     } 

     app.UseIdentity(); 
     app.UseCookieAuthentication(); 
     app.UseGoogleAuthentication(new GoogleOptions() 
     { 
      ClientId = "xxx", 
      ClientSecret = "xxx", 
      AutomaticChallenge = true, 
      AutomaticAuthenticate = true 
     }); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller}/{action}/{id?}"); 
     }); 

AuthController.cs

[HttpGet] 
    [AllowAnonymous] 
    [Route("ExternalLogin", Name = "ExternalLogin")] 
    public IActionResult ExternalLogin(string provider, string returnUrl = null) 
    { 
     var redirectUrl = Url.Action("ExternalLoginCallback", "Auth", new { ReturnUrl = returnUrl }); 
     var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); 
     return new ChallengeResult(provider, properties); 
    } 

Исключение произошло где-то после возврата ChallengeResult. Я что-то пропустил?

+0

Я пробовал ваш код и был перенаправлен на google успешно ('ExternalLogin' не вызывался из-за' AutomaticChallenge = true'). Кажется, есть еще одна проблема. Я подозреваю, что исключение может произойти после проверки подлинности Google. –

ответ

4

Вы используете как app.UseIdentity(), так и установку AutomaticAuthenticate = true на вашем промежуточном программном обеспечении google на true. Identity устанавливает cookie auth в AutomaticAuthenticate, и вы можете использовать только одно промежуточное ПО для проверки подлинности как автоматическое, в противном случае поведение не определено.

В documentation вы увидите, что при подключении фейсбука нет для автоматической аутентификации.

+0

Я буду отмечать его как правильный ответ, спасибо. Но моя проблема заключалась в том, что после ваших предложений, что я передал провайдер google, а не [G] oogle (с заглавной буквы), после того, как я его изменил, он начал работать: / –

Смежные вопросы