Δημιουργήστε έναν μηχανισμό σύνδεσης χρησιμοποιώντας έλεγχο ταυτότητας cookie και δημιουργήστε έναν μηχανισμό ανακατεύθυνσης εάν δεν έχετε πιστοποιηθεί

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον λειτουργίας

Οπτικό στούντιο
  • Κοινότητα Visual Studio 2022
ASP.NET Core (MVC, Σελίδες ξυραφιού)
6.0

Αρχικά

Αυτή τη φορά, το ASP.NET Core θα χρησιμοποιήσει τον έλεγχο ταυτότητας cookie ως μηχανισμό ελέγχου ταυτότητας σύνδεσης. Μπορείτε να σκεφτείτε ότι ο έλεγχος ταυτότητας cookie είναι παρόμοιος με τον έλεγχο ταυτότητας παραδοσιακών φορμών.

Ένας άλλος μηχανισμός ελέγχου ταυτότητας για ASP.NET Core είναι ASP.NET Core Identity. Εκτός από τον έλεγχο ταυτότητας χρησιμοποιώντας φόρμες, αυτό σας επιτρέπει να κάνετε έλεγχο ταυτότητας με API, να χρησιμοποιείτε εξωτερικές υπηρεσίες σύνδεσης, να διαχειρίζεστε και να επαναφέρετε κωδικούς πρόσβασης κ.λπ. Μπορείτε να χρησιμοποιήσετε πολλές δυνατότητες. Ωστόσο, από την άποψη της δημιουργίας μιας απλής οθόνης σύνδεσης αυτή τη φορά, θα είναι ένας κάπως υπερβολικός μηχανισμός ελέγχου ταυτότητας. Δεν θα το χρησιμοποιήσουμε αυτή τη φορά.

Στις συμβουλές ελέγχου ταυτότητας cookie που εισήχθησαν αυτή τη φορά, δεν μπορείτε να εμφανίσετε τίποτα άλλο εκτός από την οθόνη σύνδεσης εκτός εάν συνδεθείτε. Εάν προσπαθήσετε να πλοηγηθείτε σε άλλη οθόνη, θα ανακατευθυνθείτε στην οθόνη σύνδεσης. Εάν συνδεθείτε, μπορείτε να δείτε άλλες οθόνες.

Προς το παρόν, μπορείτε να συνδεθείτε εισάγοντας το όνομα χρήστη και τον κωδικό πρόσβασής σας στην οθόνη σύνδεσης. Ο ίδιος ο έλεγχος ταυτότητας χρήστη υλοποιείται ως προσωρινός χώρος. Σε αυτήν την περίπτωση, η κύρια εστίαση είναι στην εφαρμογή του ελέγχου ταυτότητας cookie, οπότε η ουσία της διαδικασίας προσδιορισμού, όπως το αν ο κωδικός πρόσβασης είναι σωστός, δεν είναι η ουσία.

Αυτή η συμβουλή περιγράφει μόνο ένα τμήμα του προγράμματος. Για τον πλήρη κώδικα, κατεβάστε το πλήρες πρόγραμμα. Καλύπτει επίσης πλαίσια MVC και Razor Pages.

Δημιουργία έργου

Ξεκινήστε το Visual Studio και δημιουργήστε ένα νέο έργο.

Στο πεδίο Razor Pages, επιλέξτε ASP.NET Core Web App ή MVC, επιλέξτε ASP.NET Core Web App (Model-View-Controller).

Καθορίστε ένα όνομα έργου της επιλογής σας και μια θέση για το έργο.

Για τον τύπο ελέγχου ταυτότητας, επιλέξτε "Κανένας". Εάν επιλέξετε άλλο έλεγχο ταυτότητας, θα χρησιμοποιήσετε ASP.NET βασική ταυτότητα. Όταν τελειώσετε με τις ρυθμίσεις, κάντε κλικ στο κουμπί "Δημιουργία".

Μετά τη δημιουργία του έργου, η οθόνη που εμφανίζεται παρακάτω θα εμφανιστεί κατά την εκτέλεση του εντοπισμού σφαλμάτων. Θα δημιουργήσουμε ένα πρόγραμμα με βάση αυτήν την οθόνη.

Επεξεργασία προγράμματος.cs (Razor Pages, MVC Common)

Προσθέστε τους ορισμούς που απαιτούνται για τον έλεγχο ταυτότητας cookie στο Πρόγραμμα.cs. Οι χώροι ονομάτων που θα προστεθούν είναι οι εξής:

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;

Εδώ είναι builder.Services ο κώδικας που πρέπει να προσθέσετε στο .

// === 省略 ===

// 「Razor Pages」のコード
// builder.Services.AddRazorPages();
// 「MVC」のコード
// builder.Services.AddControllersWithViews();

// ※ここから追加

// Cookie による認証スキームを追加する
builder.Services
  .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  .AddCookie();

builder.Services.AddAuthorization(options =>
{
  // AllowAnonymous 属性が指定されていないすべての画面、アクションなどに対してユーザー認証が必要となる
  options.FallbackPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();
});

// ※ここまで追加

var app = builder.Build();

// === 省略 ===

AddAuthenticationAddCookie Μπορείτε να ενεργοποιήσετε τον έλεγχο ταυτότητας cookie εκτελώντας τη μέθοδο and. Εάν δεν χρειάζεται να αλλάξετε το όνομα του συνδυασμού, CookieAuthenticationDefaults.AuthenticationScheme καθορίστε .

AddAuthorization Εάν καθορίσετε options.FallbackPolicy RequireAuthenticatedUser για τη μέθοδο Μπορείτε να εφαρμόσετε μια πολιτική που απαιτείται έλεγχος ταυτότητας σε όλες τις σελίδες, όλους τους ελεγκτές και τις ενέργειες. Εάν θέλετε να απαιτήσετε έλεγχο ταυτότητας για οτιδήποτε άλλο εκτός από την οθόνη σύνδεσης, είναι μια χρήσιμη μέθοδος όσον αφορά τη μείωση του κώδικα και την πρόληψη σφαλμάτων στην περιγραφή. Θα πρέπει να γράψετε κώδικα που δεν απαιτεί έλεγχο ταυτότητας για την οθόνη σύνδεσης ξεχωριστά.

Ο παρακάτω είναι app ο κωδικός για το .

// === 省略 ===

app.UseRouting();

app.UseAuthentication(); // [追加] 認証
app.UseAuthorization(); // 認可

// 「Razor Pages」のコード
// app.MapRazorPages();
// 「MVC」のコード
// app.MapControllerRoute(
//     name: "default",
//     pattern: "{controller=Home}/{action=Index}/{id?}");

// === 省略 ===

Εφόσον θέλουμε να προσθέσουμε λειτουργικότητα ελέγχου ταυτότητας στην εφαρμογή, app.UseAuthentication() θα προσθέσουμε . Η θέση περιγραφής είναι σύμφωνα με την τεκμηρίωση MSDN, εφαρμογή. UseAuthorization(). Εκτός από αυτό, εξακολουθεί να είναι ένα πρότυπο.

Προγράμματα για έργα Razor Pages

Δημιουργία σελίδας σύνδεσης (Pages/Account/Login.cshtml.cs)

Δημιουργία αρχείου

Δημιουργήστε μια σελίδα σύνδεσης. Η διαδρομή αρχείου θα πρέπει να δημιουργηθεί ως "/Pages/Account/Login.cshtml". Αυτό συμβαίνει επειδή η προεπιλεγμένη διαδρομή σύνδεσης είναι έτσι. Εάν θέλετε να αλλάξετε αυτήν τη διαδρομή, μπορείτε Program.cs να το κάνετε ορίζοντας το όρισμα της AddCookie μεθόδου .

Μπορείτε να το δημιουργήσετε αντιγράφοντας άλλα αρχεία αντί να το δημιουργήσετε από το μενού, αλλά σε αυτήν την περίπτωση, διορθώστε σωστά το πρόγραμμα.

Επιτρέψτε στους χρήστες να έχουν πρόσβαση στη σελίδα σύνδεσης χωρίς να συνδεθούν

Program.cs Δεδομένου ότι όλες οι σελίδες είναι προσβάσιμες μόνο όταν είστε συνδεδεμένοι, πρέπει να ορίσετε μόνο τη σελίδα σύνδεσης, ώστε να έχετε πρόσβαση σε αυτήν ακόμα κι αν δεν είστε συνδεδεμένοι.

AllowAnonymous Προσθέτοντας χαρακτηριστικά, είναι δυνατή η πρόσβαση στη σελίδα προορισμού ακόμη και αν δεν έχει υποβληθεί σε έλεγχο ταυτότητας. AllowAnonymous Τα χαρακτηριστικά μπορούν να χρησιμοποιηθούν σε άλλα μέρη εκτός από την οθόνη σύνδεσης, όπως λειτουργίες API που δεν σχετίζονται με τον έλεγχο ταυτότητας cookie.

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Security.Claims;

namespace AspNetCoreCookieAuthenticationRazorPages.Pages.Account
{
  [AllowAnonymous]
  public class LoginModel : PageModel
  {
  }
}

Δημιουργήστε μια μεταβλητή για να λάβετε δεδομένα εισόδου

Όταν συνδέεστε, δηλώνετε το όνομα χρήστη σας για να μπορείτε να λαμβάνετε αυτές τις τιμές επειδή εισάγετε τον κωδικό πρόσβασής σας.

// 省略

[AllowAnonymous]
public class LoginModel : PageModel
{
  /// <summary>ユーザー名。</summary>
  [BindProperty]
  [Required]
  [DisplayName("ユーザー名")]
  public string UserName { get; set; } = "";

  /// <summary>パスワード。</summary>
  [BindProperty]
  [Required]
  [DataType(DataType.Password)]
  [DisplayName("パスワード")]
  public string Password { get; set; } = "";
}

Ορισμός ονόματος χρήστη και κωδικού πρόσβασης για έλεγχο ταυτότητας σύνδεσης

Αρχικά, θα αποθηκευόταν σε μια βάση δεδομένων κ.λπ., αλλά επειδή η κρίση του χρήστη δεν είναι η κύρια εστίαση αυτή τη φορά, θα το κάνω ως προσωρινό μέρος.

// 省略

[AllowAnonymous]
public class LoginModel : PageModel
{
  // 省略

  /// <summary>仮のユーザーデータベースとする。</summary>
  private Dictionary<string, string> UserAccounts { get; set; } = new Dictionary<string, string>
    {
      { "user1", "password1" },
      { "user2", "password2" },
    };
}

Διαδικασία σύνδεσης

/// <summary>ログイン処理。</summary>
public async Task<ActionResult> OnPost()
{
  // 入力内容にエラーがある場合は処理を中断してエラー表示
  if (ModelState.IsValid == false) return Page();

  // ユーザーの存在チェックとパスワードチェック (仮実装)
  // 本 Tips は Cookie 認証ができるかどうかの確認であるため入力内容やパスワードの厳密なチェックは行っていません
  if (UserAccounts.TryGetValue(UserName, out string? getPass) == false || Password != getPass)
  {
    ModelState.AddModelError("", "ユーザー名またはパスワードが一致しません。");
    return Page();
  }

  // サインインに必要なプリンシパルを作る
  var claims = new[] { new Claim(ClaimTypes.Name, UserName) };
  var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
  var principal = new ClaimsPrincipal(identity);

  // 認証クッキーをレスポンスに追加
  await HttpContext.SignInAsync(principal);

  // ログインが必要な画面にリダイレクトします
  return RedirectToPage("/Index");
}

Αυτή είναι η διαδικασία ελέγχου ταυτότητας αφού πατήσετε το κουμπί σύνδεσης. Εάν το όνομα χρήστη και ο κωδικός πρόσβασης ταιριάζουν, είναι δυνατός ο έλεγχος ταυτότητας.

Ο κωδικός που περιγράφεται είναι ο ελάχιστος κωδικός που απαιτείται για τον έλεγχο ταυτότητας,ClaimClaimsIdentityClaimsPrincipal και HttpContext.SignInAsync Καλώντας τη μέθοδο, δημιουργείται ένα cookie και πιστοποιείται.

Εάν απαιτούνται πρόσθετες αξιώσεις ή λήξη cookie, προστίθενται πρόσθετες παράμετροι.

Αφού συνδεθείτε, ανακατευθύνεστε στο , όπου /Index απαιτείται έλεγχος ταυτότητας.

Διαδικασία αποσύνδεσης

/// <summary>ログアウト処理。</summary>
public async Task OnGetLogout()
{
  // 認証クッキーをレスポンスから削除
  await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
}

Logout Όταν η πρόσβαση γίνεται με ένα πρόγραμμα χειρισμού, υποβάλλεται σε επεξεργασία για αποσύνδεση. HttpContext.SignOutAsync Καλώντας τη μέθοδο, μπορείτε να διαγράψετε το cookie και να το επιστρέψετε σε μια κατάσταση όπου δεν είστε συνδεδεμένοι.

Δημιουργία προβολής

Δεν λαμβάνουμε υπόψη την εμφάνιση. Προσθέστε πεδία για την εισαγωγή του ονόματος χρήστη και του κωδικού πρόσβασής σας όπως φαίνεται παρακάτω και τοποθετήστε ένα κουμπί για να συνδεθείτε. Θα πρέπει επίσης να έχετε έναν σύνδεσμο για πρόσβαση χωρίς να συνδεθείτε για /Index δοκιμή.

Δεδομένου ότι είναι ενοχλητικό να εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασης, ορίζεται η αρχική τιμή.

@page
@model AspNetCoreCookieAuthenticationRazorPages.Pages.Account.LoginModel
@{}

<form asp-action="Login">
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    </div>
  </div>

  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="UserName" class="form-label"></label>
      <input asp-for="UserName" class="form-control" value="user1" />
      <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="Password" class="form-label"></label>
      <input asp-for="Password" class="form-control" value="password1" />
      <span asp-validation-for="Password" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <button type="submit" class="btn btn-primary">ログイン</button>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <a asp-page="/Index">認証が必要な画面へ直接リンク</a>
    </div>
  </div>
</form>

@section Scripts {
  @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

Δημιουργία συνδέσμου αποσύνδεσης (/Pages/Shared/_Layout.cshtml)

Δεν θα κάνουμε αλλαγές στην αρχική οθόνη, αλλά θα βάλουμε έναν σύνδεσμο αποσύνδεσης στη γραμμή πλοήγησης. Επίσης, για δοκιμή, δημοσιεύστε έναν σύνδεσμο που σας μεταφέρει στην οθόνη σύνδεσης χωρίς να αποσυνδεθείτε.

<!-- 中略 -->
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
  <ul class="navbar-nav flex-grow-1">
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
    </li>
    <!-- ここから追加 -->
    <li class="nav-item">
      <a class="nav-link text-dark" asp-page="/Account/Login" asp-page-handler="Logout">ログアウト</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-page="/Account/Login">ログアウトせずログインへ</a>
    </li>
    <!-- ここまで追加 -->
  </ul>
</div>
<!-- 中略 -->

Αυτό είναι για τον κώδικα Razor Pages.

Προγράμματα για έργα MVC

Δημιουργία μοντέλου σύνδεσης

Έχετε δημιουργήσει ένα μοντέλο για να λαμβάνετε τις τιμές που εισάγονται στην οθόνη σύνδεσης.

namespace AspNetCoreCookieAuthenticationMvc.Models
{
  public class LoginModel
  {
    /// <summary>ユーザー名。</summary>
    [Required]
    [DisplayName("ユーザー名")]
    public string UserName { get; set; } = "";

    /// <summary>パスワード。</summary>
    [Required]
    [DataType(DataType.Password)]
    [DisplayName("パスワード")]
    public string Password { get; set; } = "";
  }
}

Δημιουργία AccountController

Δημιουργήστε τους ελεγκτές και τις ενέργειες που απαιτούνται για τη δημιουργία της οθόνης σύνδεσης. Δημιουργήστε το όνομα AccountController του χειριστηρίου ως . Αυτό συμβαίνει επειδή από προεπιλογή, το όνομα του ελεγκτή και το όνομα ενέργειας στην οθόνη σύνδεσης έχουν οριστεί σε "~ / Λογαριασμός / Σύνδεση". Εάν θέλετε να αλλάξετε αυτήν τη διαδρομή, μπορείτε να το κάνετε στις επιλογές της AddCookie μεθόδου στο Πρόγραμμα.cs. Προς το παρόν, θα προχωρήσουμε στις προεπιλεγμένες ρυθμίσεις.

Αρχικά, ας δημιουργήσουμε την πλευρά του χειριστηρίου.

using AspNetCoreCookieAuthenticationMvc.Models;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

namespace AspNetCoreCookieAuthenticationMvc.Controllers
{
  /// <remarks>
  /// <see cref="AllowAnonymous"/> 属性は Cookie 認証していなくてもアクセスできる Action (Controller) であることを示す。
  /// </remarks>
  [AllowAnonymous]
  public class AccountController : Controller
  {
  }
}

AllowAnonymous Με την εκχώρηση του χαρακτηριστικού, όλες οι ενέργειες σε αυτό μπορούν να εκτελεστούν χωρίς έλεγχο ταυτότητας. Αυτό σας επιτρέπει να έχετε πρόσβαση μόνο στην οθόνη σύνδεσης χωρίς έλεγχο ταυτότητας.

AllowAnonymous Τα χαρακτηριστικά μπορούν επίσης να χρησιμοποιηθούν σε ελεγκτές μόνο API που δεν σχετίζονται με τον έλεγχο ταυτότητας cookie σε άλλα μέρη εκτός από την οθόνη σύνδεσης.

Στη συνέχεια, ορίστε τους χρήστες και τους κωδικούς πρόσβασης που μπορούν να συνδεθούν. Αρχικά, θα αποθηκευόταν σε μια βάση δεδομένων κ.λπ., αλλά επειδή η κρίση του χρήστη δεν είναι η κύρια εστίαση αυτή τη φορά, θα το κάνω ως προσωρινό μέρος.

[AllowAnonymous]
public class AccountController : Controller
{
  /// <summary>仮のユーザーデータベースとする。</summary>
  private Dictionary<string, string> UserAccounts { get; set; } = new Dictionary<string, string>
    {
      { "user1", "password1" },
      { "user2", "password2" },
    };
}

Ακολουθεί μια ενέργεια που εμφανίζει την οθόνη σύνδεσης. Δεδομένου ότι εμφανίζεται μόνο, επιστρέφει την προβολή ως έχει.

/// <summary>ログイン画面を表示します。</summary>
public IActionResult Login() => View();

Παρακάτω είναι ο κωδικός που πρέπει να υποβληθεί σε επεξεργασία κατά τη σύνδεση.

/// <summary>ログイン処理を実行します。</summary>
[HttpPost]
public async Task<IActionResult> Login(LoginModel model)
{
  // 入力内容にエラーがある場合は処理を中断してエラー表示
  if (ModelState.IsValid == false) return View(model);

  // ユーザーの存在チェックとパスワードチェック (仮実装)
  // 本 Tips は Cookie 認証ができるかどうかの確認であるため入力内容やパスワードの厳密なチェックは行っていません
  if (UserAccounts.TryGetValue(model.UserName, out string? getPass) == false || model.Password != getPass)
  {
    ModelState.AddModelError("", "ユーザー名またはパスワードが一致しません。");
    return View(model);
  }

  // サインインに必要なプリンシパルを作る
  var claims = new[] { new Claim(ClaimTypes.Name, model.UserName) };
  var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
  var principal = new ClaimsPrincipal(identity);

  // 認証クッキーをレスポンスに追加
  await HttpContext.SignInAsync(principal);

  // ログインが必要な画面にリダイレクトします
  return RedirectToAction(nameof(HomeController.Index), "Home");
}

Αυτή είναι η διαδικασία ελέγχου ταυτότητας αφού πατήσετε το κουμπί σύνδεσης. Εάν το όνομα χρήστη και ο κωδικός πρόσβασης ταιριάζουν, είναι δυνατός ο έλεγχος ταυτότητας.

Ο κωδικός που περιγράφεται είναι ο ελάχιστος κωδικός που απαιτείται για τον έλεγχο ταυτότητας,ClaimClaimsIdentityClaimsPrincipal και HttpContext.SignInAsync Καλώντας τη μέθοδο, δημιουργείται ένα cookie και πιστοποιείται.

Εάν απαιτούνται πρόσθετες αξιώσεις ή λήξη cookie, προστίθενται πρόσθετες παράμετροι.

Αφού συνδεθείτε, ανακατευθύνεστε στο , όπου ~/Home/Index απαιτείται έλεγχος ταυτότητας.

Τέλος, προστίθεται η διαδικασία αποσύνδεσης.

/// <summary>ログアウト処理を実行します。</summary>
public async Task<IActionResult> Logout()
{
  // 認証クッキーをレスポンスから削除
  await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

  // ログイン画面にリダイレクト
  return RedirectToAction(nameof(Login));
}

HttpContext.SignOutAsync Καλώντας τη μέθοδο, μπορείτε να διαγράψετε το cookie και να το επιστρέψετε σε μια κατάσταση όπου δεν είστε συνδεδεμένοι.

Δημιουργία αναλυτικής προβολής (φόρμα σύνδεσης) (/Views/Account/Login.cshtml)

Login Κάντε δεξί κλικ στην ενέργεια για να προσθέσετε μια προβολή. Μπορείτε επίσης να το δημιουργήσετε αντιγράφοντάς το από άλλο αρχείο.

Δεν λαμβάνουμε υπόψη την εμφάνιση. Προσθέστε πεδία για την εισαγωγή του ονόματος χρήστη και του κωδικού πρόσβασής σας όπως φαίνεται παρακάτω και τοποθετήστε ένα κουμπί για να συνδεθείτε. Θα πρέπει επίσης να έχετε έναν σύνδεσμο για πρόσβαση χωρίς να συνδεθείτε για Home/Index δοκιμή.

Δεδομένου ότι είναι ενοχλητικό να εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασης, ορίζεται η αρχική τιμή.

@model LoginModel
@{}

<form asp-action="Login">
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    </div>
  </div>

  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="UserName" class="form-label"></label>
      <input asp-for="UserName" class="form-control" value="user1" />
      <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="Password" class="form-label"></label>
      <input asp-for="Password" class="form-control" value="password1" />
      <span asp-validation-for="Password" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <button type="submit" class="btn btn-primary">ログイン</button>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <a asp-controller="Home" asp-action="Index">認証が必要な画面へ直接リンク</a>
    </div>
  </div>
</form>

@section Scripts {
  @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

Δημιουργία συνδέσμου αποσύνδεσης (/Views/Shared/_Layout.cshtml)

Δεν θα κάνουμε αλλαγές στην αρχική οθόνη, αλλά θα βάλουμε έναν σύνδεσμο αποσύνδεσης στη γραμμή πλοήγησης. Επίσης, για δοκιμή, δημοσιεύστε έναν σύνδεσμο που σας μεταφέρει στην οθόνη σύνδεσης χωρίς να αποσυνδεθείτε.

<!-- 中略 -->
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
  <ul class="navbar-nav flex-grow-1">
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
    </li>
    <!-- ここから追加 -->
    <li class="nav-item">
      <a class="nav-link text-dark" asp-controller="Account" asp-action="Logout">ログアウト</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-controller="Account" asp-action="Login">ログアウトせずログインへ</a>
    </li>
    <!-- ここまで追加 -->
  </ul>
</div>
<!-- 中略 -->

Αυτό είναι όλο για τον κώδικα MVC.

Επιβεβαίωση λειτουργίας

Αυτό ολοκληρώνει την ελάχιστη απαιτούμενη εφαρμογή του ελέγχου ταυτότητας cookie. Δοκιμάστε να το εκτελέσετε και δείτε πώς λειτουργεί. Η συμπεριφορά θα πρέπει να αλλάξει ανάλογα με το αν είστε συνδεδεμένοι ή όχι. Ως απλό παράδειγμα, μπορείτε να δείτε την ακόλουθη συμπεριφορά.

λειτουργίας
Αποτέλεσμα λειτουργίας
Πηγαίνετε σπίτι χωρίς να συνδεθείτε Ανακατεύθυνση στην οθόνη σύνδεσης
Σύνδεση Μεταβείτε στην αρχική οθόνη
Αποσυνδεθείτε από το σπίτι και πηγαίνετε σπίτι χωρίς να συνδεθείτε Ανακατεύθυνση στην οθόνη σύνδεσης
Πηγαίνετε σπίτι χωρίς να αποσυνδεθείτε από το σπίτι και να συνδεθείτε Μεταβείτε στην αρχική οθόνη