asp.net-mvc - external authentication services with asp.net web api
AutenticaciĆ³n de Google mediante OWIN Oauth en MVC5 que no llega a la funciĆ³n ExternalLoginCallback (4)
Actualmente estoy actualizando mi proceso de inicio de sesión para que Google use OAuth antes de que disminuyan su método de inicio de sesión de OpenID.
Los pasos que he identificado hasta ahora es que actualicé el paquete Microsoft.Owin.Security.Google a la versión 2.1.0, ya que esta versión incluye la posibilidad de incluir opciones en el método UseGoogleAuthentication.
He intentado usar la Solución de Alex Wheat en el enlace: Obtener ExtraData del marco de MVC5 OAuth / OWin proveedor de identidad con un proveedor de autenticación externo
El código en Startup.Auth.cs (que también incluye la autenticación de Facebook) se deriva de esto:
var facebookAuthenticationOptions = new FacebookAuthenticationOptions()
{
AppId = "MYAPPID",
AppSecret = "MYSECRET"
};
facebookAuthenticationOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookAuthenticationOptions);
app.UseGoogleAuthentication();
A esto:
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);
Después de agregar opciones a la Autenticación de Google, mi aplicación no permite que se llame a la acción ExternalLoginCallback para google o facebook (no hay cambios en el código de Facebook, pero el problema aún lo afecta).
En la parte delantera, después de hacer clic en los botones de inicio de sesión externos, la página me redirige al enlace de abajo y devuelve una pantalla blanca vacía.
https ...... / es / Account / ExternalLoginCallback # __ = _ (En realidad, solo hay un guión bajo antes del signo =, la sintaxis SO la elimina si la tengo tal como aparece en mi barra de direcciones).
para facebook y
https ...... / es / Cuenta / ExternalLoginCallback
para google No golpea el método del controlador a continuación como lo hace normalmente (he intentado colocar puntos de interrupción de depuración dentro de esta función y nunca se detiene cuando hay opciones de autenticación de Google).
// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
Si elimino las opciones de autenticación de la autenticación de Google, simplemente vuelve al inicio de sesión de OpenID anterior y vuelve a funcionar bien.
¿Me estoy perdiendo algo simple aquí? ¿O está pasando algo malo dentro de la Biblioteca Owin.Security.Google que está causando el problema?
Asegúrese de que también haya habilitado la API de Google+ en su consola de desarrollador. Es un paso adicional después de tener tu cliente y secreto.
Como @Ronen dijo en los comentarios, este enlace debería resolver los problemas con Google OAuth en MVC5:
blogs.msdn.com/b/webdev/archive/2014/07/02/…
También actualice los paquetes OWIN de NuGet. Así es como mi código se ve y funciona muy bien:
var googleOptions = new GoogleOAuth2AuthenticationOptions () { ClientId = "xxxxxxxxxx", ClientSecret = "xxxxxxxxxx", CallbackPath = new PathString("/signin-google") }; googleOptions.Scope.Add("email"); app.UseGoogleAuthentication(googleOptions);
Estoy usando la plantilla predeterminada de ASP.NET MVC 5 con autenticación de identidad para simplificar, pero espero que esto pueda modificarse para diferentes casos de uso.
StartupAuth.cs
No personalice la ruta de redireccionamiento. Se reemplaza por / signin-google de todos modos y mis intentos de solucionar eso causaron errores "silenciosos" (no en el depurador) Internal Server 500.
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = "whatevs.apps.googleusercontent.com",
ClientSecret = "whatevs_secrut",
Provider = new GoogleOAuth2AuthenticationProvider()
});
Asegúrese de agregar http://whatever.com/signin-google a https://console.developers.google.com/ en sus APIs & auth
> Credentials
> Redirect URIs
sección de Redirect URIs
.
RouteConfig.cs
Agregue una ruta a una acción de controlador de redireccionamiento permanente a sus rutas. Las redirecciones permanentes son lo único que bastará aquí. No es suficiente simplemente dirigir directamente a la URL de devolución de llamada.
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
Redirección permanente al método de devolución de llamada incorporado y debería estar bien.
[AllowAnonymous]
public ActionResult ExternalLoginCallbackRedirect(string returnUrl)
{
return RedirectPermanent("/Account/ExternalLoginCallback");
}
Se ha publicado un proyecto de plantilla en GitHub para referencia: https://github.com/Pritchard/Test-AspNetGoogleOAuth2Authentication
Prueba solo esto
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
ClientId = "MYCLIENTID",
ClientSecret = "MYSECRET",
};
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
Esto funciono para mi