ASP.NET Web API 2:如何使用外部authentication服务login?

根据这个职位http://www.asp.net/web-api/overview/security/external-authentication-services …我能够login本地身份validation服务(与新的Asp.net身份框架)

但无法findwalktrough(从移动应用程序或Postman )正确调用在Visual Studio 2013 SPA模板中生成的默认Web API。

谁能帮我?

我今天遇到同样的问题,发现了以下解决scheme:

首先得到所有可用的提供者

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

响应消息是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"}] 

现在发送GET请求到你想要使用的提供者的URL。 您将被redirect到外部提供者的login页面。 填写您的凭据,您将被redirect回您的网站。 现在parsingurl中的access_token

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

如果用户已经拥有本地帐户,则.AspNet.Cookies Cookie将被设置并完成。 如果没有,只有.AspNet.ExternalCookie cookie被设置,你必须注册一个本地帐户。

有一个API来找出用户是否注册:

 GET /api/Account/UserInfo 

答复是

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

要为用户创build本地帐户,请致电

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

现在像以前一样发送与提供者URL相同的请求

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

但是这一次用户已经拥有了一个账户并获得了authentication。 你可以通过再次调用/api/Account/UserInfo来validation。

现在从url中提取access_token 。 您必须将Authorization: Bearer [access_token]标头添加到您提出的每个请求。

我发现另一个post显示了这个外部authentication如何工作的细节。 客户端是WPF,服务器使用ASP.NET标识。