seguridad por net example ejemplo basada autenticacion asp asp.net .net asp.net-web-api oauth-2.0 asp.net-identity

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.