Necesito crear una autenticación entre mi interfaz Angular y el backend ASP.NET Web Api.
Los requisitos son:
No puedo encontrar ninguna documentación actualizada sobre cómo debo hacer esto... Miré a https://auth0.com/ pero están usando un paquete que ya no es compatible con mi versión web api.
Mi investigación también me enseñó que probablemente debería usar Jwt, pero estoy teniendo dificultades para construir esto en mi API web.
¿Puede alguien por favor darme la documentación adecuada? Sé que hay una autenticación integrada, pero no sé qué tan buena es esta y cómo debería usarla con JWT. Todo lo que encuentro en la web está desactualizado... .
Su ayuda es muy apreciada.
Este es el flujo que debes hacer para autenticar a un usuario con linkedin:
Parte angular:
1. redirigir al usuario con los parámetros de consulta solicitados, por ejemplo:
var req = { response_type: "code", client_id: "Your Client ID", redirect_uri: location.origin + location.pathname, state: "DCESFWf45A53sdfKef434" }; window.location.href = linkedinAuthorizationUrl + ObjecttoParams(req); 2. Después de que el usuario se autentique, LinkedIn lo redirigirá a su redirección_url con un código de nombre de parámetro de consulta adicional, su controlador angular debe recopilarlo y enviarlo a su método webapi para el siguiente paso.
Parte WebApi:
3. Una vez que haya publicado el código de Linkedin en su webapi, debe intercambiar el token con la API de Linkedin (HTTP POST), por ejemplo:
using (WebClient wc = new WebClient()){ string RedirectUrl = providerLogin.RedirectUrl; //Exchange tokens with linkedin byte[] resultAsBytes = wc.UploadValues("https://www.linkedin.com/oauth/v2/accessToken", new NameValueCollection() { { "grant_type", "authorization_code" }, { "code", "THE CODE YOU RECEIVED FROM THE CLIENT" }, {"redirect_uri",RedirectUrl }, {"client_id", "YOUR LINKEDIN KEY"}, {"client_secret", "YOUR LINKEDIN PASSWORD"} }); string resultAsString = System.Text.Encoding.UTF8.GetString(resultAsBytes); var resultAsJson = JObject.Parse(resultAsString); string accessToken = resultAsJson["access_token"].ToString(); }4. Última parte: cuando tenga el token de acceso, debe realizar una solicitud GET a la API de Linkedin para obtener los detalles del usuario:
using (WebClient wc = new WebClient()){ wc.Headers.Add("Authorization", "Bearer " + accessToken); var json = wc.DownloadString("https://api.linkedin.com/v1/people/~: (email-address,id,first-name,last-name,picture-url,public-profile-url)? format=json"); resultAsJson = JObject.Parse(json); }¡Y eso es! Espero que todo esté claro y que entiendas mi código. ¡Buena suerte!