根據這個帖子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