asp.net - por - web api c#
ASP.NET Web API 2: ¿Cómo iniciar sesión con servicios de autenticación externos? (2)
De acuerdo con este post http://www.asp.net/web-api/overview/security/external-authentication-services ... puedo iniciar sesión con el servicio de autenticación local (con el nuevo framework de identidad Asp.net)
pero no puede encontrar un walktrough para llamar correctamente (desde una aplicación móvil o un Postman ) la API web predeterminada generada en la plantilla de Visual Studio 2013 SPA.
¿Alguien puede ayudarme?
Encontré otra post muestra detalles bonitos sobre cómo funciona esta autenticación externa. El cliente es WPF y el servidor usa ASP.NET Identity.
Tuve el mismo problema hoy y encontré la siguiente solución:
Al principio, obtenga todos los proveedores disponibles
GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true
El mensaje de respuesta es una lista en formato json
[{"name":"Facebook",
"url":"/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1",
"state":"QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1"}]
Ahora envíe una solicitud GET a la url del proveedor que desea usar. Serás redirigido a la página de inicio de sesión del proveedor externo. Complete sus credenciales y será redirigido a su sitio. Ahora analiza el access_token
desde la url.
http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
Si el usuario ya tiene una cuenta local, la cookie .AspNet.Cookies
está configurada y listo. De lo contrario, solo se .AspNet.ExternalCookie
cookie .AspNet.ExternalCookie
y debe registrar una cuenta local.
Hay una API para averiguar si el usuario está registrado:
GET /api/Account/UserInfo
La respuesta es
{"userName":"xxx","hasRegistered":false,"loginProvider":"Facebook"}
Para crear una cuenta local para el usuario, llame
POST /api/Account/RegisterExternal
Authorization: Bearer VPcd1RQ4X... (access_token from url)
Content-Type: application/json
{"UserName":"myusername"}
Ahora envíe la misma solicitud con la URL del proveedor como antes
GET /api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1
Pero esta vez el usuario ya tiene una cuenta y se autentica. Puede verificar esto llamando nuevamente a /api/Account/UserInfo
.
Ahora extrae el access_token
de la url. Authorization: Bearer [access_token]
agregar el encabezado Authorization: Bearer [access_token]
a cada solicitud que realice.