Selon cet article http://www.asp.net/web-api/overview/security/external-authentication-services ... Je peux me connecter avec un service d'authentification local (avec le nouveau cadre d'identité ASP.NET)
mais je ne trouve pas de procédure pas à pas pour appeler correctement (à partir d'une application mobile ou Postman ) l'API Web par défaut générée dans le modèle SPA de Visual Studio 2013.
Quelqu'un peut-il m'aider?
J'ai eu le même problème aujourd'hui et j'ai trouvé la solution suivante:
Obtenez d'abord 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 demande 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, analysez le access_token
à partir 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 .AspNet.Cookies
le cookie est défini et vous avez terminé. Sinon, seul le .AspNet.ExternalCookie
le cookie est défini et vous devez créer un compte local.
Il y a une 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"}
Envoyez maintenant la même demande avec l'URL du fournisseur qu'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 s'authentifie. Vous pouvez le vérifier en appelant /api/Account/UserInfo
encore.
Maintenant, extrayez le access_token
à partir de l'url. Vous devez ajouter le Authorization: Bearer [access_token]
en-tête pour chaque demande que vous faites.
J'ai trouvé un autre post montrant de jolis détails sur le fonctionnement de cette authentification externe. Le client est WPF et le serveur utilise l'identité ASP.NET.