根据这个帖子http://www.asp.net/web-api/overview/security/external-authentication-services ... 我能够与当地认证服务(用新的Asp.net的身份框架)ASP.NET Web API 2:如何使用外部认证服务登录?
登录,但无法找到一个walktrough正确地调用(从移动应用程序或Postman)在Visual Studio 2013 SPA模板中生成的默认Web API。
任何人都可以帮助我吗?
根据这个帖子http://www.asp.net/web-api/overview/security/external-authentication-services ... 我能够与当地认证服务(用新的Asp.net的身份框架)ASP.NET Web API 2:如何使用外部认证服务登录?
登录,但无法找到一个walktrough正确地调用(从移动应用程序或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"}]
发送一个GET请求到你想要使用的提供者的URL。您将被重定向到外部提供商的登录页面。填写您的凭据,您将被重定向回您的网站。现在解析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"}
现在发送与提供商网址相同的请求
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]
标头添加到您提出的每个请求中。
我发现了另一个post显示相当详细讲述外部认证是如何工作的。客户端是WPF,服务器使用ASP.NET标识。
我的主要问题是,我的客户端不是一个Web应用程序,但原生移动应用程序(andoird应用或iOS应用) – acor3
@ acor3 - 这是相同的过程,不管你使用什么平台。对于原生移动应用程序,您可以在您的应用程序(iPhone上的UIWebView,Android上的WebView)中打开Web视图,将用户发送到他们选择的提供商的URL,允许他们登录并重定向url转到您的api中包含魔法令牌的页面。然后,您的应用程序将查看该令牌的Web视图,一旦找到该应用程序,它就会从中获取承载/访问令牌,然后您可以在本地HTTP GET/POST调用中使用它。 –
@berhir - 感谢您的回答,我发现它确实对Web API 2安全性有帮助。虽然我的情况稍有不同。我从另一个MVC应用程序调用API。所以你说'你会被重定向回你的网站。现在解析url中的access_token'在我的情况下,你会如何处理它? – Bartosz