HttpRequestException: произошла ошибка при получении информации о пользователе Google (запрещено). В Asp.net Core

Я пытаюсь включить социальный вход в свое основное приложение asp.net. Я успешно интегрировал Facebook и Twitter, и он отлично работает. Но при интеграции Google при возврате к URL обратного вызова он выплевывает эту страницу с ошибкой.

Я также использую пользовательский контроллер для процесса

[Route("signin/{provider}")]
public IActionResult SignIn(string provider, string returnUrl = null) => 
        Challenge(new AuthenticationProperties { RedirectUri = returnUrl ?? 
          "/" }, provider);

Приведенный выше код мой пользовательский вызов контроллера auth.cs.

страница ошибки

services.AddAuthentication(options => {
     options.DefaultAuthenticateScheme = 
CookieAuthenticationDefaults.AuthenticationScheme;
     options.DefaultChallengeScheme = 
CookieAuthenticationDefaults.AuthenticationScheme;
     options.DefaultSignInScheme = 
CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddFacebook(options => 
          {
            options.AppId = "";
            options.AppSecret = "";
        })
.AddTwitter(options =>
        {
            options.ConsumerKey = "";
            options.ConsumerSecret = 
"";
})
.AddGoogle(options => {
            options.ClientId = 
"<my client Id>";
            options.ClientSecret = "<my client secret>";
})
.AddCookie(options => {
            options.LoginPath = "/auth/signin";
});

Я ожидал, что после входа в систему с помощью Google Oauth 2.* он должен перенаправить обратно в мое приложение вместо отображения страницы с ошибкой.

3 ответа

Попробуй это:

.AddGoogle("Google", o=>
{
    o.ClientId = "<insert here>";
    o.ClientSecret = "<insert here>";
    o.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
    o.ClaimActions.Clear();
    o.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
    o.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
    o.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_name");
    o.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_name");
    o.ClaimActions.MapJsonKey("urn:google:profile", "link");
    o.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
})

Та же проблема, я застрял примерно на двое суток. К счастью, я углубился и нашел что-то новое, что в версии asp.net core 2* и выше, вы должны упомянутьUserInformationEndpoint. Он будет доступен в загруженном json-файле с console.google.developer.
Пожалуйста, найдите подробности ниже.

services.AddAuthentication()
        .AddGoogle(options =>
        {
            options.ClientId = "196275387351-has575ff9m45ka8ld17s0qtps42jkmtt.apps.googleusercontent.com";
            options.ClientSecret = "MoYpnVChG8VeDiGCw4XYrLH0";
            options.UserInformationEndpoint= "https://www.googleapis.com/oauth2/v1/certs";
          });

Контроллер: Учетная запись

public IActionResult ExternalLogin(string provider, string returnUrl)
{
    var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl });
    var properties = signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return new ChallengeResult(provider, properties);
}

Скачал Json

"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"

Я столкнулся с этой ошибкой, потому что я не включил службы из консоли разработчика Google

поэтому, когда я включил его, все работает нормально.

это была ошибка, с которой я столкнулся до ее включения. https://s tackru.com/images/1938dfad79ca79d3e2ccd086027e05b404ed4c0f.png

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-2.2

Цитата В январе 2019 года Google начал закрывать вход в Google+, и разработчики должны перейти к новой системе входа в Google к марту. Пакеты ASP.NET Core 2.1 и 2.2 для аутентификации Google будут обновлены в феврале с учетом изменений. Для получения дополнительной информации и временных мер для ASP.NET Core см. Эту проблему GitHub. Этот учебник был обновлен с новым процессом установки.

В соответствии с официальным Quick Start, вы пробовали с IdentityServerConstants.ExternalCookieAuthenticationScheme;

    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "<insert here>";
        options.ClientSecret = "<insert here>";
    })
Другие вопросы по тегам