91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用ASP.NET Core實現身份認證功能

發布時間:2020-10-29 15:48:35 來源:億速云 閱讀:152 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關使用ASP.NET Core實現身份認證功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1. 萬變不離其宗

顯而易見,一個常規的身份認證用例包括兩部分:
① 對用戶進行身份驗證
② 在未經身份驗證的用戶試圖訪問受限資源時作出反應

已注冊的身份驗證處理程序及其配置選項被稱為“方案”,方案可用作一種機制,供用戶參考相關處理程序的身份驗證、挑戰和禁止行為。

我們口頭上常說的:
基于cookie認證方案,若認證成功,go on,若認證失敗則跳轉回登錄頁面;
基于基本身份認證(BA)方案,若認證成功,go on,若認證失敗則給瀏覽器返回WWW-Authenticate標頭, 瀏覽器會再次彈出認證窗口。

2. ASP.NET Core認證原理

在 ASP.NET Core 中,身份驗證由IAuthenticationService負責,身份驗證服務會調用已注冊的身份驗證處理程序來完成與身份驗證相關的操作, 整個驗證過程由認證中間件來串聯。

其中有幾個關鍵步驟

1、認證處理程序
可結合方案Scheme中的配置項AuthenticationSchemeOptions編寫認證處理程序。

基于Cookie的認證方案可在Options項中可指定登錄地址,
基于基本身份的認證方案可在Options項中指定用戶名/密碼;

2、身份認證程序繼承自AuthenticationHandler類或IAuthenticationHandler接口。

核心認證函數可落地基于聲明的訪問控制,生成綁定了ClaimsPrincipal、Scheme的AuthenticationTicket對象; 無論認證成功/失敗,函數返回AuthenticateResult對象。

挑戰(對未認證的用戶做出的反應): 例如返回登錄頁面

禁止(對已認證,但對特定資源無權訪問做出的反應) : 例如返回提示字符串

以上均為服務注冊過程

收到請求,認證中間件使用IAuthenticationService對HttpContext按照要求的scheme進行認證, 實際內部會調用第2步編寫的認證處理程序。

以上認證原理,之前有一個近身實戰: ASP.NET Core 實現基本身份驗證。
源代碼如下:https://www.jb51.net/article/196974.htm

3. ASP.NET Core獲取當前用戶

基于聲明的訪問控制, 我們會在HttpContext.User屬性存儲身份信息。

 var claims = new[] {
        new Claim(ClaimTypes.NameIdentifier,username),
        new Claim(ClaimTypes.Name,username),
      };
 var identity = new ClaimsIdentity(claims, Scheme.Name);
 var principal = new ClaimsPrincipal(identity);
 Context.User = principal;

Web應用程序中獲取當前登錄用戶, 有兩種代碼場合:

3.1 在控制器中獲取當前登錄用戶

控制器是處理請求的 一等公民,天生自帶HttpContext。
直接通過ControllerBase基類中包含的HttpContext屬性,獲取User對象。

實際上Razor Page、Razor View、Middleware均包含HttpContext屬性/參數, 可直接使用。

3.2 在服務中獲取當前登錄用戶

這個時候,服務是作為請求處理中的一個環節,并沒有直接可用的HttpContext。
ASP.NET Core 提供了IHttpContextAccessor類能夠注入此次請求中的HttpContext對象(依賴注入框架的作用)。

// 下面的用戶實體類,需要獲取當前登錄用戶,借助IHttpContextAccessor注入httpContext
public class UserEntityService : IUserEntityService
{
  private IHttpContextAccessor _accessor;
  private readonly IMongoCollection<UserProfile> _users;

  public UserEntityService(IHttpContextAccessor accessor, IDefaultMongoDatabaseProvider databaseProvider)
  {
    _accessor = accessor;
    _users = databaseProvider.GetCollection<UserProfile>(CollectionNames.UserProfiles);
  }

  public Task<UserProfile> GetCurrentUserAsync()
  {
    var rawUser = this._accessor.HttpContext.User();
    if (rawUser == null)
    {
     return null;
    }
    var filter = Builders<UserProfile>.Filter.Eq("UserId", rawUser.UserId);
   return _users.Find(filter).FirstOrDefaultAsync();
  }
}

我們不需要區分以上代碼場合,在Controller或者Application 服務中使用ICurrentUser接口拿到登錄用戶。

關于使用ASP.NET Core實現身份認證功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武清区| 安泽县| 四平市| 平罗县| 南宫市| 盘山县| 威宁| 贡觉县| 荣昌县| 东兴市| 桐庐县| 秦皇岛市| 陵水| 中宁县| 泉州市| 闵行区| 太保市| 嘉善县| 水富县| 吐鲁番市| 山阴县| 洛阳市| 新津县| 湘西| 河北省| 铁力市| 定远县| 原阳县| 徐闻县| 宁明县| 株洲县| 高唐县| 日照市| 盐山县| 娱乐| 札达县| 新龙县| 云梦县| 高邮市| 喀什市| 虞城县|