久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

怎么在ASP.NETCore在使用Cookie驗證身份-創(chuàng)新互聯(lián)

本篇文章為大家展示了怎么在ASP.NET Core在使用Cookie驗證身份,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10余年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都上1000家中小型企業(yè)策劃設(shè)計了網(wǎng)站。

ASP.NET Core 1.x


按下列步驟操作:

在您的項目中安裝Microsoft.AspNetCore.Authentication.CookiesNuGet包。此包包含Cookie中間件。

在Startup.cs文件中的Configure方法中添加下面的行,在app.UseMvc()語句之前:

app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
      AccessDeniedPath = "/Account/Forbidden/",
      AuthenticationScheme = "MyCookieAuthenticationScheme",
      AutomaticAuthenticate = true,
      AutomaticChallenge = true,
      LoginPath = "/Account/Unauthorized/"
    });

ASP.NET Core 2.x

按下列步驟操作:

如果不使用Microsoft.AspNetCore.All 元包,則在您的項目中安裝2.0版的Microsoft.AspNetCore.Authentication.CookiesNuGet包。

在Startup.cs文件中的Configure方法中調(diào)用UseAuthentication方法:

app.UseAuthentication();

在Startup.cs文件中的ConfigureServices方法中調(diào)用AddAuthentication和AddCookie方法:


services.AddAuthentication("MyCookieAuthenticationScheme")
        .AddCookie("MyCookieAuthenticationScheme", options => {
          options.AccessDeniedPath = "/Account/Forbidden/";
          options.LoginPath = "/Account/Unauthorized/";
        });

上面的代碼片段配置了以下部分或全部選項:

  • AccessDeniedPath - 當用戶嘗試訪問資源但沒有通過任何授權(quán)策略時,這是請求會重定向的相對路徑資源。

  • AuthenticationScheme - 這是一個已知的特定Cookie認證方案的值。當有多個Cookie驗證實例,并且您想限制對一個實例的授權(quán)時,這就非常有用。

  • AutomaticAuthenticate - 此標識僅適用于ASP.NET Core 1.x。它表示Cookie身份驗證應(yīng)在每個請求上運行,并嘗試驗證和重建序列化主體。

  • AutomaticChallenge - 此標識僅適用于ASP.NET Core 1.x。這表示當授權(quán)失敗時,1.x Cookie認證應(yīng)將瀏覽器重定向到LoginPath或AccessDeniedPath。

  • LoginPath - 當用戶嘗試訪問資源但尚未認證時,這是請求重定向的相對路徑。

其它選項包括為Cookie認證創(chuàng)建的設(shè)置選項,身份驗證的Cookie的名稱,Cookie的域和Cookie各種安全屬性。默認情況下,Cookie身份驗證為其創(chuàng)建的任何Cookie使用適當?shù)陌踩x項,例如:

  • 設(shè)置HttpOnly標志以防止客戶端JavaScript中訪問Cookie

  • 如果請求是通過HTTPS訪問,則將Cookie限制為HTTPS

創(chuàng)建身份認證Cookie

要創(chuàng)建一個保存用戶信息的cookie,您必須構(gòu)建一個ClaimsPrincipal 保存您希望序列化到Cookie中的信息。

ASP.NET Core 1.x


await HttpContext.Authentication.SignInAsync("MyCookieAuthenticationScheme", principal);

ASP.NET Core 2.x


await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal);

這將創(chuàng)建一個加密的Cookie并將其添加到當前響應(yīng)中。在調(diào)用SignInAsync時,必須在配置中指定的AuthenticationScheme。

順便提一下,使用的加密方式是ASP.NET Core的Data Protection系統(tǒng)。如果您在多臺機器上進行托管、負載平衡或使用Web集群,則需要配置Data Protection才能使用相同的密鑰和應(yīng)用程序標識符。

Signing out(登出)

要退出當前用戶并刪除其Cookie,請在控制器中調(diào)用以下方法:

ASP.NET Core 1.x


await HttpContext.Authentication.SignOutAsync("MyCookieAuthenticationScheme");

ASP.NET Core 2.x


await HttpContext.SignOutAsync("MyCookieAuthenticationScheme");

服務(wù)端變化反饋

警告: 一旦創(chuàng)建了認證的Cookie,它將成為的身份來源。即使您在服務(wù)系統(tǒng)中禁用用戶,Cookie身份驗證也無法了解此信息,只要Cookie有效,用戶仍可登錄。

Cookie認證在其選項中提供了一系列事件。ValidateAsync()事件可用于攔截和重寫Cookie身份驗證。

可以考慮在后端用戶數(shù)據(jù)庫中增加LastChanged列。為了在數(shù)據(jù)庫更改時使Cookie無效,您應(yīng)該首先在創(chuàng)建Cookie時添加一個LastChanged包含當前值的聲明。數(shù)據(jù)庫更改時,更新LastChanged例的值。

要重寫ValidateAsync()事件的實現(xiàn),您必須編寫一個具有以下簽名的方法:

Task ValidateAsync(CookieValidatePrincipalContext context);

ASP.NET Core Identity 在SecurityStampValidator實現(xiàn)了這一邏輯,鏈接地址。示例如下所示:

ASP.NET Core 1.x

  public static class LastChangedValidator
  {
    public static async Task ValidateAsync(CookieValidatePrincipalContext context)
    {
      // Pull database from registered DI services.
      var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();
      var userPrincipal = context.Principal;
  
      // Look for the last changed claim.
      string lastChanged;
      lastChanged = (from c in userPrincipal.Claims
              where c.Type == "LastUpdated"
              select c.Value).FirstOrDefault();
  
      if (string.IsNullOrEmpty(lastChanged) ||
        !userRepository.ValidateLastChanged(userPrincipal, lastChanged))
      {
        context.RejectPrincipal();
        await context.HttpContext.Authentication.SignOutAsync("MyCookieAuthenticationScheme");
      }
    }
  }

然后,在Startup.cs文件中的Configure方法中將Cokie認證配置進行重寫:

  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
    Events = new CookieAuthenticationEvents
    {
      OnValidatePrincipal = LastChangedValidator.ValidateAsync
    }
  });

ASP.NET Core 2.x

  public static class LastChangedValidator
  {
    public static async Task ValidateAsync(CookieValidatePrincipalContext context)
    {
      // Pull database from registered DI services.
      var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();
      var userPrincipal = context.Principal;
  
      // Look for the last changed claim.
      string lastChanged;
      lastChanged = (from c in userPrincipal.Claims
              where c.Type == "LastUpdated"
              select c.Value).FirstOrDefault();
  
      if (string.IsNullOrEmpty(lastChanged) ||
        !userRepository.ValidateLastChanged(userPrincipal, lastChanged))
      {
        context.RejectPrincipal();
        await context.HttpContext.SignOutAsync("MyCookieAuthenticationScheme");
      }
    }
  }

然后,將在Startup.cs的ConfigureServices方法中將Cookie服務(wù)注冊進行配置:

  services.AddAuthentication("MyCookieAuthenticationScheme")
      .AddCookie(options =>
      {
        options.Events = new CookieAuthenticationEvents
        {
          OnValidatePrincipal = LastChangedValidator.ValidateAsync
        };
      });

如果要非破壞性地更新用戶主體,可以調(diào)用context.ReplacePrincipal(),并將context.ShouldRenew屬性設(shè)置為true。

Cookie設(shè)置選項

CookieAuthenticationOptions類提供了各種配置選項,在創(chuàng)建時調(diào)整Cookie的配置。

ASP.NET Core 1.x

  • ClaimsIssuer是由中間件創(chuàng)建的任何聲明時使用的Issuer屬性。

  • CookieDomain是提供Cookie的域名。默認情況下,這是發(fā)送請求的主機名。瀏覽器僅將Cookie提供給匹配的主機名。您可能希望對此進行調(diào)整,以便您的域中的任何主機都可以使用Cookie。例如,將Cookie域名設(shè)置為.contoso.com,可以使用Cookie的域名有contoso.com、www.contoso.com、staging.www.contoso.com等。

  • CookieHttpOnly是一個標識,指定Cookie是否只能由服務(wù)器訪問。默認為true。如果您的應(yīng)用程序具有Cross-Site Scripting(XSS)的問題,更改此值可能會導(dǎo)致Cookie被盜用。

  • CookiePath可用于隔離在相同主機名上運行的應(yīng)用程序。如果你有一個應(yīng)用程序在/app1中運行,并希望限制發(fā)送的Cookie只發(fā)送到該應(yīng)用程序,那么您應(yīng)該將CookiePath屬性設(shè)置為/app1。通過這樣做,Cookie只適用于對/app1或其下任何內(nèi)容的請求。

  • CookieSecure是一個標識,表示創(chuàng)建的Cookie是否應(yīng)該被限制為HTTPS,HTTP或HTTPS,或與請求相同的協(xié)議。默認為SameAsRequest。

  • ExpireTimeSpan是TimeSpan類型,在此時間段之后Cookie將過期。將當前日期加上此時間段為創(chuàng)建Cookie的到期日期。

  • SlidingExpiration是一個標識,指示當超過一半的ExpireTimeSpan間隔時,Cookie到期日期是否復(fù)位。新的到期日是當前時間加上ExpireTimespan。調(diào)用SignInAsync時,可以使用AuthenticationProperties類設(shè)置絕對到期時間。絕對到期時間可以通過限制認證Cookie有效的時間來提高應(yīng)用程序的安全性。

在Startup.cs文件中的Configure方法中使用CookieAuthenticationOptions的例子如下:

  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
    CookieName = "AuthCookie",
    CookieDomain = "contoso.com",
    CookiePath = "/",
    CookieHttpOnly = true,
    CookieSecure = CookieSecurePolicy.Always
  });

ASP.NET Core 2.x

ASP.NET Core 2.x 統(tǒng)一了用于配置Cookie的API。1.x API已被標記為過時,并且在CookieAuthenticationOptions類中引入了一種類型為CookieBuilder新的Cookie屬性。建議您遷移到2.x API。

  • ClaimsIssuer是由Cookie認證創(chuàng)建的任何聲明時使用的Issuer屬性。

  • CookieBuilder.Domain是提供Cookie的域名。默認情況下,這是發(fā)送請求的主機名。瀏覽器僅將Cookie提供給匹配的主機名。您可能希望對此進行調(diào)整,以便您的域中的任何主機都可以使用Cookie。例如,將Cookie域名設(shè)置為.contoso.com,可以使用Cookie的域名有contoso.com、www.contoso.com、staging.www.contoso.com等

  • CookieBuilder.HttpOnly是一個標識,指定Cookie是否只能由服務(wù)器訪問。默認為true。如果您的應(yīng)用程序具有Cross-Site Scripting(XSS)的問題,更改此值可能會導(dǎo)致Cookie被盜用。

  • CookieBuilder.Path可用于隔離在相同主機名上運行的應(yīng)用程序。如果你有一個應(yīng)用程序在/app1中運行,并希望限制發(fā)送的Cookie只發(fā)送到該應(yīng)用程序,那么您應(yīng)該將CookiePath屬性設(shè)置為/app1。通過這樣做,Cookie只適用于對/app1或其下任何內(nèi)容的請求。

  • CookieBuilder.SameSite表示瀏覽器是否允許Cookie被附加到同一站點或跨站點的請求。默認為SameSiteMode.Lax。

  • CookieBuilder.SecurePolicy是一個標識,表示創(chuàng)建的Cookie是否應(yīng)該被限制為HTTPS,HTTP或HTTPS,或與請求相同的協(xié)議。默認為SameAsRequest。

  • ExpireTimeSpan是TimeSpan類型,在此時間段之后Cookie將過期。將當前日期加上此時間段為創(chuàng)建Cookie的到期日期。

  • SlidingExpiration是一個標識,指示當超過一半的ExpireTimeSpan間隔時,Cookie到期日期是否復(fù)位。新的到期日是當前時間加上ExpireTimespan。調(diào)用SignInAsync時,可以使用AuthenticationProperties類設(shè)置絕對到期時間。絕對到期時間可以通過限制認證Cookie有效的時間來提高應(yīng)用程序的安全性。

在Startup.cs的ConfigureServices方法中使用CookieAuthenticationOptions的例子如下:

  services.AddAuthentication()
    .AddCookie(options =>
    {
      options.Cookie.Name = "AuthCookie";
      options.Cookie.Domain = "contoso.com";
      options.Cookie.Path = "/";
      options.Cookie.HttpOnly = true;
      options.Cookie.SameSite = SameSiteMode.Lax;
      options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    });

持久Cookie和絕對到期時間

您可能希望Cookie在瀏覽器會話中持續(xù)存在,并希望設(shè)置身份和Cookie傳輸?shù)慕^對過期時間。這種持久性應(yīng)該只能是用戶顯示同意,在登錄時的“記住我”復(fù)選框或類似的機制啟用。您可以通過在創(chuàng)建身份認證Cookie時調(diào)用的SignInAsync方法中使用AuthenticationProperties參數(shù)來執(zhí)行這些操作。例如:

ASP.NET Core 1.x

  await HttpContext.Authentication.SignInAsync(
    "MyCookieAuthenticationScheme",
    principal,
    new AuthenticationProperties
    {
      IsPersistent = true
    });

上述代碼片段中使用的AuthenticationProperties類,位于Microsoft.AspNetCore.Http.Authentication命名空間中。

ASP.NET Core 2.x

  await HttpContext.SignInAsync(
    "MyCookieAuthenticationScheme",
    principal,
    new AuthenticationProperties
    {
      IsPersistent = true
    });

上述代碼片段中使用的AuthenticationProperties類,位于Microsoft.AspNetCore.Authentication命名空間中。

上面的代碼段創(chuàng)建一個身份和相應(yīng)的Cookie,直到瀏覽器關(guān)閉。以前通過Cookie設(shè)置選項配置的任何滑動過期設(shè)置仍然有效。如果Cookie在瀏覽器關(guān)閉時過期,瀏覽器會在重新啟動后清除它。如果Cookie在瀏覽器關(guān)閉時過期,瀏覽器會在重新啟動后清除它。

ASP.NET Core 1.x


  await HttpContext.Authentication.SignInAsync(
    "MyCookieAuthenticationScheme",
    principal,
    new AuthenticationProperties
    {
      ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
    });

ASP.NET Core 2.x


  await HttpContext.SignInAsync(
    "MyCookieAuthenticationScheme",
    principal,
    new AuthenticationProperties
    {
      ExpiresUtc = DateTime.UtcNow.AddMinutes(20)
    });

上述內(nèi)容就是怎么在ASP.NET Core在使用Cookie驗證身份,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:怎么在ASP.NETCore在使用Cookie驗證身份-創(chuàng)新互聯(lián)
當前地址:http://sd-ha.com/article24/dpcgce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版網(wǎng)站設(shè)計公司、關(guān)鍵詞優(yōu)化手機網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)