2017-08-02 71 views
1

我開發了一個項目ASP.NET MVC。在我的項目中,我有兩種用戶:1-User2-Customer如何在asp.net中使用ASP.NET身份的Web服務mvc

我使用ASP.NET身份對用戶進行授權和我有這樣的方法登錄:

public virtual async Task<ActionResult> Login(LoginViewModel loginViewModel, string returnUrl) 
{ 
    var loggedinUser = await _applicationUserManagerService.FindAsync(loginViewModel.Email, loginViewModel.Password); 
    if (loggedinUser != null) 
     await _applicationUserManagerService.UpdateSecurityStampAsync(loggedinUser.Id); 

    var result = await _signInManagerService.PasswordSignInAsync(loginViewModel.Email, loginViewModel.Password, loginViewModel.RememberMe, shouldLockout: true); 
    switch (result) 
    { 
     case Microsoft.AspNet.Identity.Owin.SignInStatus.Success: 
      return RedirectToLocal(returnUrl); 
     case Microsoft.AspNet.Identity.Owin.SignInStatus.Failure: 
      break; 
     case Microsoft.AspNet.Identity.Owin.SignInStatus.LockedOut: 
      break; 
     default: 
      return View(loginViewModel); 
    } 
    return View(loginViewModel); 
} 

但是我有一個問題,我必須通過授權Web ServiceCustomer,我不知道該怎麼做到這一點。我可以使用ASP.NET Identity,還是我應該使用Session?

登錄後可以更換頁面,並且在每個頁面中我必須從Web Services加載一些數據。

將數據放入cookie中安全嗎?

回答

1

首先,您用於用戶身份驗證的Microsoft.AspNet.Identity.Owin.SignInManager只是一個超過Claim-Base Identity的外觀。

要授權用戶在應用程序中,您只需要創建ClaimsIdentity並運行AuthenticationManager.SignIn方法。

你的代碼可以改變方式如下:

public virtual async Task<ActionResult> Login(LoginViewModel loginViewModel, string returnUrl) 
{ 
    ... 

    //try to authenticate user via login and password 
    var result = await _signInManagerService.PasswordSignInAsync(loginViewModel.Email, loginViewModel.Password, loginViewModel.RememberMe, shouldLockout: true); 
    switch (result) 
    { 
     ... 

     //try to authenticate customer via web-service 
     case Microsoft.AspNet.Identity.Owin.SignInStatus.Failure: 
      //proxy-class to access your web-service 
      CustomerServiceClient clientToService = new CustomerServiceClient(); 
      var customerData = clientToService.LoadCustomerData(loginViewModel.Email, loginViewModel.Password) 

      ... 

      ClaimsIdentity identity = CustomerIdentityHelper.CreateIdentity(customerData); 
      AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = loginViewModel.RememberMe}, identity); 
      break; 
     default: 
      return View(loginViewModel); 
    } 
} 

根據你的最後一個問題,在哪裏存儲用戶數據,可以存儲經常使用的要求,在默認情況下被加密並存儲在cookie數據(如果基於cookie的認證中間件被添加到應用程序管道中)。但是這樣的數據量不應該太大。否則,您可以使用會話或每次從服務中查詢數據。

+0

謝謝。我只有一個問題。創建另一個登錄表單不是更好嗎?因爲它可能是用戶和獲取成果結果,並以這種方式,我不需要檢查Web服務。 –

+1

這取決於你將如何讓用戶進行身份驗證。我剛剛寫了如何以兩種不同的方式授權用戶和客戶。何處使用此代碼取決於您的應用程序需求和UI。 –

+0

對於最後一個問題,我如何才能限制客戶'客戶'專區?因爲我不想讓客戶訪問'Admin'區域? –

相關問題