2016-12-02 140 views
2

我目前正在開發一個不使用身份的項目。Cookie無身份Asp.net核心

事情是,這個項目應該有一個記住我的選項,允許用戶自動重新連接到網站。

我的問題是,我找不到任何完整的tutoriel來創建一個沒有身份的cookie。

如果有人有代碼或教學課程:)

感謝

+0

編寫cookie:https://msdn.microsoft.com/zh-cn/library/aa287547( v = vs.71).aspx閱讀一個cookie:https://msdn.microsoft.com/en-us/library/aa287533(v=vs.71).aspx – Kevin

+0

我有一個簡單的cookie auth解決方案示例https: //github.com/joeaudette/cloudscribe.Web.SimpleAuth –

回答

0

在燈架上有一個在這裏相當好文章一個很好的例子:Using Cookie Middleware without ASP.NET Core Identity

基本上你所做的是設置cookie處理中間件就好像你要識別用戶,但是你只是創建一個ClaimsPrincipal對象而不要求用戶登錄。您將該對象傳遞給SigninAsync方法,併爲您創建cookie。如果你按照這篇文章,你應該沒問題。

+0

我已經按照文檔的文章,對我來說不是我期望從一個或兩個值設置一個基本的cookie來重新連接用戶。 – OrcusZ

+1

是的,它看起來有點複雜,但我認爲如果你自己實現了一切,你最終會得到類似的結果。您仍然可以通過HttpContext.Response.Cookies訪問Cookie。如果您在使用Intellisense的MVC控制器中採取行動,那麼您會在該處看到它。但是您需要每個請求的信息,因此您需要創建一些中間件,並將其放置在管道的前端,以訪問上下文並在Cookie到達任何控制器之前對其進行管理。所以你最終會寫一些類似文章中的中間件組件。 – GlennSills

3

在我的項目中,我使用AngularJS作爲前端和.Net核心API作爲後端。 因此,我不需要配置頁面AccessDeniedPath,LoginPath等。

這是我做的:

  • 配置的cookie在啓動類:

    public void Configure(IApplicationBuilder app) { 
        //... 
        CookieAuthenticationOptions options = new CookieAuthenticationOptions(); 
        options.AuthenticationScheme = "MyCookie"; 
        options.AutomaticAuthenticate = true; 
        options.CookieName = "MyCookie"; 
        app.UseCookieAuthentication(options); 
        //... 
    } 
    
  • 登錄是這樣的:

    [HttpPost, Route("Login")] 
    public IActionResult LogIn([FromBody]LoginModel login) { 
        //... 
        var identity = new ClaimsIdentity("MyCookie"); 
        //add the login as the name of the user 
        identity.AddClaim(new Claim(ClaimTypes.Name, login.Login)); 
        //add a list of roles 
        foreach (Role r in someList.Roles) { 
        identity.AddClaim(new Claim(ClaimTypes.Role, r.Name)); 
        } 
        var principal = new ClaimsPrincipal(identity); 
        HttpContext.Authentication.SignInAsync("MyCookie", principal).Wait(); 
        return Ok(); 
    } 
    
  • 註銷就好這個:

    [HttpPost, Route("Logout")] 
    public async Task<IActionResult> LogOut() { 
        await HttpContext.Authentication.SignOutAsync("MyCookie"); 
        return Ok(); 
    } 
    
  • 然後你可以使用它像這樣:

    [HttpPost] 
    [Authorize(Roles = "Role1,Role2,Role3")] 
    public IActionResult Post() { 
        //... 
        string userName = this.User.Identity.Name; 
        //... 
    } 
    

*請參閱該方法僅授權給 「基於role1,role2所和Role3」。並瞭解如何獲取用戶名。

1

我想你是問如何在用戶使用「記住我?」登錄時製作持久性cookie。複選框已選中。

所有答案都在正確的路徑上 - 您最終會調用HttpContext.Authentication.SignInAsync,但Cookie中間件默認會發出會話Cookie。您需要將身份驗證屬性作爲第三個參數傳遞,以使Cookie保持不變,例如:

HttpContext.Authentication.SignInAsync(
    Options.Cookies.ApplicationCookieAuthenticationScheme, 
    userPrincipal, 
    new AuthenticationProperties { IsPersistent = isPersistent });