Подтвердить что ты не робот

Аутентификация Google с использованием OWIN Oauth в MVC5 не влияет на функцию ExternalLoginCallback

В настоящее время я обновляю свой процесс регистрации для Google, чтобы использовать OAuth, прежде чем они лишают их метода входа OpenID.

Действия, которые я определил до сих пор, это то, что я обновил пакет Microsoft.Owin.Security.Google до версии 2.1.0, так как эта версия включает возможность включения параметров в метод UseGoogleAuthentication.

Я попытался использовать решение Alex Wheat в ссылке: Получить дополнительные данные из структуры MVC5 OAuth/OWin поставщика удостоверений с внешним поставщиком авторизации

Код в Startup.Auth.cs(который также включает аутентификацию Facebook):

    var facebookAuthenticationOptions = new FacebookAuthenticationOptions()
        {
            AppId = "MYAPPID",
            AppSecret = "MYSECRET"
        };
        facebookAuthenticationOptions.Scope.Add("email");
        app.UseFacebookAuthentication(facebookAuthenticationOptions);

        app.UseGoogleAuthentication();

Для этого:

var facebookAuthenticationOptions = new FacebookAuthenticationOptions()
        {
            AppId = "MYAPPID",
            AppSecret = "MYSECRET"
        };
        facebookAuthenticationOptions.Scope.Add("email");
        app.UseFacebookAuthentication(facebookAuthenticationOptions);


        var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
        {
            ClientId = "MYCLIENTID",
            ClientSecret = "MYSECRET",
            CallbackPath = new PathString("/en/Account/ExternalLoginCallback"),
            Provider = new GoogleOAuth2AuthenticationProvider()
            {

            }
        };

        app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);

После добавления параметров в Аутентификацию Google мое приложение не позволяет вызывать действие ExternalLoginCallback для google или facebook (никаких изменений в коде facebook, но проблема все равно влияет на него).

На переднем конце после нажатия внешних кнопок входа страница перенаправляет меня по ссылке ниже и возвращает пустой белый экран

https....../ru/Account/ExternalLoginCallback # __ = _ (Фактически только один знак подчеркивания перед символом =, синтаксис SO удаляет его, если он у меня есть, как он отображается в моей адресной строке).

для facebook и

HTTPS....../EN/Account/ExternalLoginCallback

для google. Это не влияет на метод контроллера ниже, как обычно (я попытался разместить точки останова отладки внутри этой функции и никогда не останавливается при наличии параметров проверки подлинности Google.

    // GET: /Account/ExternalLoginCallback
    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {

Если я удалю параметры проверки подлинности из Google Authentication, он просто вернется к старой учетной записи OpenID и снова отлично работает.

Я пропустил что-то простое здесь? или есть что-то плохое в библиотеке Owin.Security.Google, которая вызывает проблему?

4b9b3361

Ответ 1

Попробуйте только это

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

Это сработало для меня

Ответ 2

Я использую шаблон ASP.NET MVC по умолчанию по умолчанию с идентификационной аутентификацией для простоты, но, надеюсь, это может быть изменено для разных случаев использования.

StartupAuth.cs

Не настраивайте путь перенаправления. Он все равно заменяется /signin -google, и мои попытки обойти это вызвали "немой" (не в отладчике) ошибки Internal Server 500.

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
    ClientId = "whatevs.apps.googleusercontent.com",
    ClientSecret = "whatevs_secrut",
    Provider = new GoogleOAuth2AuthenticationProvider()
});

Обязательно добавьте http://whatever.com/signin-google в https://console.developers.google.com/ в APIs & auth > Credentials > Redirect URIs.

RouteConfig.cs

Добавьте маршрут к постоянному действию контроллера перенаправления на ваши маршруты. Перманентные переадресации - единственное, что будет достаточно здесь. Недостаточно просто напрямую обращаться к URL-адресу обратного вызова.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Google API Sign-in",
        url: "signin-google",
        defaults: new { controller = "Account", action = "ExternalLoginCallbackRedirect" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

AccountController.cs

Постоянное перенаправление на встроенный метод обратного вызова, и вы должны быть в порядке.

[AllowAnonymous]
public ActionResult ExternalLoginCallbackRedirect(string returnUrl)
{
    return RedirectPermanent("/Account/ExternalLoginCallback");
}

Проект шаблона размещен на GitHub для справки: https://github.com/Pritchard/Test-AspNetGoogleOAuth2Authentication

Ответ 3

Убедитесь, что вы также включили Google+ API в свою консоль разработчика. Это дополнительный шаг после того, как у вас есть клиент и секрет

Ответ 4

Как пояснил @Ronen в комментариях, эта ссылка должна решить проблемы с Google OAuth в MVC5:

http://blogs.msdn.com/b/webdev/archive/2014/07/02/changes-to-google-oauth-2-0-and-updates-in-google-middleware-for-3-0-0-rc-release.aspx

Также обновите пакеты OWIN от NuGet. Так выглядит и работает мой код:

       var googleOptions = new GoogleOAuth2AuthenticationOptions ()
       {
           ClientId = "xxxxxxxxxx",
           ClientSecret = "xxxxxxxxxx",
           CallbackPath = new PathString("/signin-google")
       };
       googleOptions.Scope.Add("email");

       app.UseGoogleAuthentication(googleOptions);