используя GoogleOAuth2AuthenticationOptions получил ошибку несоответствия uri перенаправления


Я пытаюсь реализовать аутентификацию Google в веб-приложении MVC 5. Аутентификация работает нормально, но я бы извлек информацию профиля и изображения.

Чтобы сделать это, я добавил GoogleOAuth2AuthenticationOptions объекта для указания дополнительных требований :

var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
    ClientId = "xxxxxxxxxxxxxxxx",
    ClientSecret = "xxxxxxxxxxxxxxxxx",
    CallbackPath = new PathString("/Account/LoginCallback"),
    Provider = new GoogleOAuth2AuthenticationProvider()
    {
        OnAuthenticated = async context =>
        {
            context.Identity.AddClaim(new Claim("picture", context.User.GetValue("picture").ToString()));
            context.Identity.AddClaim(new Claim("profile", context.User.GetValue("profile").ToString()));
        }
    }
};

app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);

Но это приводит к тому, что генерируется неправильный URL-адрес :

Http://admin.localhost.com/Account/LoginCallback&state=Gs-otJmI79bgWA3_qJzDcGziWnkRCOf7JRoCUDCIz0jv4IIvDdoZlZzVSq2kZxfaPFDmv9hbZGp5q1Aq8mpLPguKnCF31twHj8NQCMv_NrgZzvKwaelmZr_HwY_bdj8h1ICFrkGTKLJ1saEYDbFJ2CJxvDkyBL2iygQmTXQTs-aUiL4yWe5_7dZQOjP_mDUSW-GXns3wr7Okwkoj8VEITJTUz9nAbrBd_N_7puTMlHU&client_id=xxxxxxxxxxxxxxxx

Нет '?"перед параметрами, это вызывает redirect_uri_mismatch.

Однако, когда я использую просто:

app.UseGoogleAuthentication(
    clientId : "xxxxxxxxxxxxxxxxxxx",
    clientSecret : "xxxxxxxxxxxxxxxxx");

Это работающий.

Есть идеи ?

2 5

2 ответа:

Используйте только это.

var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
            {
                ClientId = "MYCLIENTID",
                ClientSecret = "MYSECRET",
            };
    app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);

Этот метод, по-видимому, автоматически использует запрос signin-google в address.To исправьте это изменение местоположения обратного вызова google в консоли google, чтобы указать на этот адрес.

Добавить файл RouteConfig

 routes.MapRoute( name: "signin-google", url: "signin-google", defaults: new { controller = "Account", action = "LoginCallback" } ); 

Используйте этот приведенный ниже фрагмент кода, который работает нормально, просто замените ClientID, и ClientSecret будет работать для вас.

     var googleOptions = new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            ClientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            Provider = new GoogleOAuth2AuthenticationProvider()
            {
                OnAuthenticated = (context) =>
                {
                    context.Identity.AddClaim(new Claim("urn:google:name", context.Identity.FindFirstValue(ClaimTypes.Name)));
                    context.Identity.AddClaim(new Claim("urn:google:email", context.Identity.FindFirstValue(ClaimTypes.Email)));
                    //This following line is need to retrieve the profile image
                    context.Identity.AddClaim(new System.Security.Claims.Claim("urn:google:accesstoken", context.AccessToken, ClaimValueTypes.String, "Google"));

                    return Task.FromResult(0);
                }
            }
        };

        app.UseGoogleAuthentication(googleOptions);

Если все еще существует ошибка

Предположим, что URI вашего приложения соответствует приведенному ниже

Http://localhost:2625/

Затем на console.developers.google.com URI, который вы зарегистрировали, необходимо изменить, как показано ниже.

Просто добавьте [signin-google] в URI на конец

Http://localhost:2625/signin-google

И, наконец, сохранить его.

Внесение изменений в авторизованные URI перенаправления на console.developers.google.com