1

我是一個畏懼新手到asp.net身份框架。有簡單的會員供應商經驗等。asp.net身份通過鏈接/ url進行身份驗證asp.net mvc 5

我想通過使用一個特殊的URL和一個令牌來驗證用戶。 像:http://www.website.com/urlAuth/

獲得用戶的電子郵件,我想用戶登錄/與這個網址

令牌激活一定的時間,有一個用戶帳戶ANDS連接到它的一些行爲進行身份驗證。

我不能躺在我的手指如何讓用戶驗證沒有密碼。我調查了一個impersination場景(我在web.config中對身份驗證信息有一個特殊的假設),但這並不是我認爲的可靠解決方案。

有些人可以幫我指導我一個堅實的解決方案

謝謝!

回答

2

您不需要密碼就可以對身份中的用戶進行身份驗證。只需要根據令牌找到相關用戶即可。考慮這個簡單的例子:

public ActionResult UrlAuth(string token) 
{ 
    var userManager=HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
    // imaging you have a custom token manager which return userID form token 
    string userID=_tokenManager.GetUserIDByToken(token); 
    var user = userManager.FindById(userID); 
    if (user != null) 
    { 
     var ident = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 

     HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, ident); 
     // authentication succeed do what you want 
     return Redirect("Wherever"); 
    } 
    ModelState.AddModelError("", "Invalid username or password"); 
    return View(); 
} 
+0

喜山姆,這看起來很簡單!感謝您的快速答覆。我明天會試試!親切的問候 – user4494221

+1

如果你正在談論由身份產生的令牌,那麼我不認爲有可能推斷出什麼用戶有什麼令牌,因爲令牌是由密碼生成的(或者可以這樣做?)。我建議傳遞一個userId和令牌一樣,默認的模板和密碼reset一樣:通過傳遞ID來查找用戶,驗證令牌;如果令牌無誤,請登錄用戶。 – trailmax

+1

@trailmax我假設了令牌管理器並生成了完全獨立於標識的令牌。也許生成的令牌是唯一的並映射到用戶ID。或者用戶標識已經嵌入到生成的令牌中。這個答案的重點是如何驗證用戶沒有密碼的問題。生成和管理令牌是另一回事。 –