ASP.NET Web API 2: comment se connecter avec des services d’authentification externes?

Selon ce post http://www.asp.net/web-api/overview/security/external-authentication-services … je suis capable de me connecter avec un service d’authentification locale (avec le nouveau framework d’identité Asp.net)

mais vous ne pouvez pas trouver une piste pour appeler correctement (depuis une application mobile ou Postman ) l’API Web par défaut générée dans le modèle Visual Studio 2013 SPA.

Quelqu’un peut-il m’aider?

J’ai eu le même problème aujourd’hui et j’ai trouvé la solution suivante:

D’abord obtenir tous les fournisseurs disponibles

GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true 

Le message de réponse est une liste au format 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"}] 

Envoyez maintenant une requête GET à l’URL du fournisseur que vous souhaitez utiliser. Vous serez redirigé vers la page de connexion du fournisseur externe. Remplissez vos informations d’identification et vous serez redirigé vers votre site. Maintenant, access_token le access_token de l’URL.

 http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1 

Si l’utilisateur possède déjà un compte local, le cookie .AspNet.Cookies est défini et vous avez terminé. Sinon, seul le cookie .AspNet.ExternalCookie est défini et vous devez enregistrer un compte local.

Il y a un api pour savoir si l’utilisateur est enregistré:

 GET /api/Account/UserInfo 

La réponse est

 {"userName":"xxx","hasRegistered":false,"loginProvider":"Facebook"} 

Pour créer un compte local pour l’utilisateur, appelez

 POST /api/Account/RegisterExternal Authorization: Bearer VPcd1RQ4X... (access_token from url) Content-Type: application/json {"UserName":"myusername"} 

Maintenant, envoyez la même demande avec l’URL du fournisseur comme avant

 GET /api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1 

Mais cette fois, l’utilisateur a déjà un compte et est authentifié. Vous pouvez le vérifier en appelant /api/Account/UserInfo nouveau.

Maintenant, extrayez le access_token de l’URL. Vous devez append l’en-tête Authorization: Bearer [access_token] à chaque requête que vous effectuez.

J’ai trouvé un autre article montrant très bien comment cette authentification externe fonctionne. Le client est WPF et le serveur utilise Identité ASP.NET.