簡體   English   中英

在 ASP.NET (MVC5) web api 項目中授權用戶

[英]Authorising users in an ASP.NET (MVC5) web api project

好的,所以我在嘗試在我的 ASP.NET MVC5(Web API 2)項目中獲得身份驗證過程時有點掙扎。 首先,這里有一些要求:

  • 我不能使用實體框架(對數據庫的所有訪問都需要通過存儲過程完成)
  • 需要面向 .NET Framework 4.5.2
  • 我沒有使用 ASP.NET Core
  • 我希望能夠使用 Bearer(或類似)令牌進行身份驗證
  • 如果用戶注銷或在 24 小時后自動使令牌無效,我想使令牌無效
  • 我想在向“登錄”(或“令牌”)端點發送請求時傳遞(並接收)XML(請注意,理想情況下,解決方案應尊重“內容類型”和“接受”標頭,因此如果我發送它JSON 它應該以 JSON 響應,如果我發送它 XML 它應該以 XML 響應)
  • 我不會很快(也許永遠不會)使用外部提供商(例如 Google)
  • 我想使用<Authorize>屬性來幫助保護其他端點
  • 我正在使用 VB.NET,盡管這個問題的答案可以在 C# 中(我可以轉換它們或重寫它們以適應)
  • 我想將令牌存儲在數據庫中,以便我可以記錄哪個用戶在 API 中執行的操作

(請注意,我無法更改上述內容的原因有很多)

我曾嘗試使用 Owin (OAuth) 執行此操作,但在將其與要求進行比較時發現以下問題:

  • 我似乎無法向令牌端點發送任何 XML
  • 來自身份驗證端點(成功和不成功)的響應采用 JSON 格式
  • 注銷時我無法使令牌無效

如果這是我想要的最佳方式,我很高興離開 OAuth。 我更喜歡使用 Microsoft 構建的 nuget 包(即沒有第三方解決方案),或者我很樂意部分推出我自己的解決方案(我想盡可能多地利用內置或 Microsoft 構建的代碼,包括身份和聲明所以我可以最大限度地減少測試工作)。

我已經閱讀了許多關於此的 StackOverflow 問題並在互聯網上搜索了大量內容,但盡管存在上述問題,但大多數文章仍堅持使用 OAuth,或者它們依賴於 EntityFramework。 我當前的解決方案使用這里的代碼(幾乎復制/粘貼了 ApplicationOAuthProvider.GrantResourceOwnerCredentials() 中的一些自定義代碼): https : //www.codeproject.com/Articles/1187872/Token-Based-Authentication-for-Web- API-where-Legac

謝謝您的幫助!

我做了一些更廣泛的研究,看起來 OAuth 不適用於我的特定情況。 盡管這看起來是一種不錯的身份驗證方法,但我確實需要通過數據庫使令牌無效,並且我需要 API 始終發送/接收 XML(這些在使用 OAuth 時顯然不適用)。

為了解決這些問題,我推出了自己的基於令牌的解決方案,在客戶端創建一個散列令牌,所以我從不通過網絡發送密碼(這更好一點),因為令牌是在客戶端生成的(請注意,我正在控制客戶端發生的事情 - 這些都是內部客戶端,我正在編寫這些客戶端將使用的庫)。 這涉及我創建自己的過濾器,它繼承了System.Web.Http.AuthorizeAttribute

如果有人偶然發現了這個問題並提供了一個非常好的答案,我很樂意將他們的答案標記為已接受。

暫無
暫無

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

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