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.