ASP.NET Web Api (REST):使用使用者憑據或令牌進行身份驗證?留下“註冊新使用者”資源密碼免費?
我正在嘗試使用 asp.net web api 創建一個 REST 服務,一切正常,但我現在遇到瞭如何處理身份驗證。
我有點困惑從哪裡開始,這是我一直在想的。
我有一個包含許多資源的 REST api,每個資源都需要註冊使用者,那麼這樣做的最佳操作是什麼?我是否應該在每次呼叫服務時在標頭中發送使用者名和密碼,以便我可以使用在伺服器上進行身份驗證
AuthorizationFilterAttribute
我至少應該加密它?我很想知道其他人在做什麼,我知道有一個創建令牌的概念(我認為這將是短暫的),因此使用者將進行身份驗證,然後會收到一個令牌,然後這個令牌將被發送進一步呼叫該服務。那麼當令牌過期時我將如何處理這個問題呢?
我還有一個用於註冊新使用者的資源,實際上唯一會呼叫它的是我的客戶(Android、iPhone)。那麼我應該讓它免於任何身份驗證方法或輸入硬編碼密碼或類似的東西,以便至少沒有其他人可以註冊新使用者嗎?請記住,該服務將在網際網路上公開。
我只是似乎無法找到正確的方法來做到這一點,我當然想第一次嘗試就正確,所以我不必完全重構服務。
以下連結似乎涵蓋了一些明智的 DIY 選項http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/。“基於公鑰/私鑰的令牌”部分涵蓋了我過去有效使用的一種方法,可能會對您有所幫助。
目前雖然我正在使用http://identityserver.codeplex.com/ Thinktecture IdentityServer 和 OAuth 不記名令牌(“資源所有者密碼憑證”授權類型)……我發現這是一組非常好的程式碼和範例工作並讓 IOS 客戶端獲取令牌並呼叫 WebApi。
如果您真的必須保護您的註冊螢幕,您可以使用安裝在設備上的客戶端證書進行身份驗證…… Thinktecture 服務可以在這裡提供幫助https://identity.thinktecture.com/idsrv/docs/default.htm?RequestingatokenusingOAuth2。 .html _ 雖然如果您的註冊過程是安全的 什麼是帶有 nonce 的電子郵件中的啟動/註冊/密碼重置連結的最佳實踐,例如電子郵件確認和啟動等,但公開訪問可能是安全的 - 這一切都取決於您的業務需求和所需的標誌向上工作流程。
您至少應該使用傳輸級安全 SSL,但正如您建議的消息級安全性,例如加密任何令牌是非常可取的 - OAuth 規範對此http://self-issued.info/docs/draft-ietf-oauth有話要說-v2-bearer.html#mitigation。
關於過期令牌 - 我們傾向於以與我們的密碼更改策略相同的頻率使令牌過期;雖然保持有效時間很重要(以盡量減少令牌盜竊的影響)並且考慮平衡您的要求。OAuth 有刷新令牌的概念為什麼 OAuth v2 既有訪問令牌又有刷新令牌?這裡有一些關於這個主題的辯論和連結,我們目前沒有使用這種方法,因為我們使用的 ID 伺服器目前不支持這種方法。
確保您的令牌安全也是一個考慮因素,例如我們在 IOS 中使用 KeyChain,但如果可能的話,還要考慮移動設備管理策略,好像這些令牌或密碼是它們可能被盜的設備之一,也許查看越獄檢測、鎖定螢幕執法等