簡體   English   中英

處理WebAPI時的身份驗證-授權問題

[英]Authentication-Authorization issue when dealing with WebAPI

我正在將一個應用程序重新開發為Web應用程序(“先前的”迭代是在VB6中)以在azure上運行。 一項要求是我們僅使用facebook / google身份驗證(OAuth 2.0) 另一個業務需求使我將項目分解為以下架構:

  • 1個用於WebAPI 2.0的項目
  • 1個控制器項目
  • 1用於數據訪問(典型的層模式)
  • MVC 5前端的N個項目

這個想法是MVC項目將僅通過javascript / json使用WebAPI! N個MVC項目將僅包含頁面的GET實現。 沒有模型或其他動作(例如發布)。 換句話說,MVC項目已與其他項目完全斷開連接,並且應該沒有任何智能!

由於(虛假的客戶端和)有限的時間限制,因此選擇此方法。
無論如何,您會注意到“核心”(WebAPI +控制器+ DA)是共享的。 實際上,核心是多租戶服務。 (但請記住斷開的方面!)

我的問題是:如何處理授權? MVC項目和WebAPI之間的聲明傳遞應該怎樣/如何處理? 我在這里迷路了。 經過一番思考,我得出的結論是,我需要使WebAPI項目在這里充當代理,類似於:

  • 隨機用戶登陸www.myClientWebsite.com/Register
  • 選擇登錄提供商
  • MVC項目會將用戶信號重定向到Facebook,以返回www.myWebAPI.com/Register
  • 我攔截了該要求,並將用戶重定向到原始www.myClientWebsite.com/LoginComplete或其他內容。

我搞錯了嗎?

在這種情況下,您必須使用OAuth 2進行身份驗證和授權。 是的,您應該在MVC級別進行身份驗證,然后使用令牌來保持其余呼叫的安全性。

在這里,您的MVC應用程序應該從身份提供商(如google)獲得Bearer令牌,然后將其隱藏在表單上的某些位置。 然后,對於您向Web api發出的每個jquery請求,您都必須在請求中發送此承載令牌。

[更新]這被認為是一種駭客,我不鼓勵這樣做。 僅當兩個系統都在同一域中時,此方法才有效。 [\\更新]

如果MVC和Web API都位於不同的域上,則可以考慮使用Azure ACS服務身份在域之間建立信任關系。 然后在請求的有效負載中傳遞用戶聲明的承載令牌。

[更新]這是處理此問題的更好方法,但必須伴隨適當的令牌吊銷和https安全。 [\\更新]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM