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标识。