2

驗證用戶[這個問題涉及到ASP.NET MVC4,並且它是關於最佳實踐方法 - 所以請,不建議黑客]在查詢字符串身份驗證令牌與ASP.NET MVC

我想使用請求URL中發送的身份驗證令牌對用戶進行身份驗證。它的作用類似於密碼重置令牌,除非在這種情況下它不會進入重置頁面,而是授予對網站某些部分的訪問權限。這個想法是將帶有認證令牌的URL發送到用戶的經過驗證的電子郵件地址。用戶可以單擊鏈接並執行一些操作,而無需鍵入密碼。

開箱即用,ASP.NET具有[Authorize]屬性和SimpleMembershipProvider - 這些似乎很好,但他們在引擎蓋下面做了一些巫術魔法(如自動生成數據庫表),所以我不知道如何擴展它們來添加這個基於鏈接的身份驗證令牌。

我不期待一個確切的答案,但請指點我正確的方向。

謝謝!

回答

2

Uf,廣泛的問題。但我會盡量讓你指引一個正確的方向。

因此,首先建議您使用Forms身份驗證作爲基礎,但您必須自定義使用它。而且我認爲您不希望使用Cookie進行身份驗證,因爲這是表單身份驗證的本機行爲。

最重要的一點你應該考慮讓你自定義基於查詢字符串令牌的身份驗證。

  1. 創建登錄的行動並在行動,你將授權用戶,如果他授予你問FormsAuthentication創建AuthCookie訪問。對於更進一步,你只需把httpCookie.Value作爲你的認證令牌,你將攜帶在查詢字符串中。

  2. 您需要實現Application_BeginRequestGlobal.asax將處理此查詢字符串令牌和它翻譯成cookie的。通過這種方法,您可以利用所有ASP.NET Forms身份驗證基礎結構。

這是相當高級別的圖片沒有代碼。如果你需要更多的細節幫助,我也可以提供給你。

+0

謝謝 - 這是很好的建議,儘可能遵循形式。我如何區分真正的表單身份驗證和基於鏈接的身份驗證?基於鏈接的身份驗證不應該提供與forms-auth相同的權限 - 例如,基於鏈接的身份驗證用戶不應該能夠更改其密碼或電子郵件地址。 – 2013-03-07 08:23:19

+0

你可以很容易地區分這一點。在Application_BeginRequest中,您將把查詢字符串轉換爲cookie,您可以解密cookie,將自定義數據(如果用戶身份驗證來自查詢字符串,將您的情況標誌)放入勾號中,然後您可以閱讀此處處理用戶身份驗證(例如操作過濾器)。有關自定義身份驗證數據的更多信息:http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/ – 2013-03-07 08:29:41

+0

呃......有趣。我會嘗試的。 – 2013-03-07 17:57:13

1

您應該只使用常規Action,它接受HttpGet。 收到令牌後立即將其無效,因此無法再次使用。 此外,只接受在您預定義的時間範圍內(如24或72小時)的令牌。

+0

我不想在控制器中處理認證。當您使用輸出緩存時,存在一些問題。另一點 - 令牌需要持久 - 雖然沒問題 - 它只授予對網站的有限訪問權限(例如,用戶無法僅使用此令牌更改密碼或電子郵件) – 2013-03-07 08:07:03

+1

然後,您可以擁有兩個處理程序。一個用於檢查令牌(不輸出緩存)並且一旦驗證令牌,則重定向到另一個動作(輸出緩存)。 – 2013-03-07 15:57:11