根据这篇文章http://www.asp.net/web-api/overview/security/external-authentication-services...我可以使用本地身份验证服务(使用新的ASP.NET身份框架)登录
但我找不到一个演练来正确调用(从移动应用程序或Postman)在Visual Studio 2013 SPA模板中生成的默认web API。
有人能帮我吗?
我今天遇到了同样的问题,找到了以下解决方案:
首先获取所有可用的提供商
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"}]
现在,向您想要使用的提供者的url发送一个GET请求。您将被重定向到外部提供商的登录页面。填写您的凭据,您将被重定向回您的网站。现在从url解析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"}
要为用户创建本地帐户,请调用
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
但这一次,用户已经有了一个帐户并获得了身份验证。您可以通过再次调用/api/Account/UserInfo
来验证这一点。
现在从url中提取access_token
。您必须将Authorization: Bearer [access_token]
标头添加到您提出的每个请求中。
我发现了另一篇文章,详细介绍了这种外部身份验证的工作原理。客户端是WPF,服务器使用ASP.NET标识。
对于那些试图在Android应用程序中使用Web Api 2外部登录Facebook的人,这篇文章只解释了我们必须做的第一部分。下面是整个图片的一个非常解释性的链接:
[通过安卓应用的Facebook令牌对WebAPI进行身份验证访问