首頁>技術>

2.8 安全認證 VS 授權ASP .NET Core 認證授權中介軟體認證JWT 認證授權認證 VS 授權認證是一個識別使用者是誰的過程授權是一個決定使用者可以幹什麼的過程401 Unauthorized 未授權403 Forbidden 禁止訪問ASP .NET Core 認證授權中介軟體

在接收到請求之後,認證(Authentication)和授權(Authorization) 發生在 路由(Routing) 和 終結點(Endpoint) 之間

執行過程認證

認證是一個識別使用者是誰的過程

程式碼示例

Web api jwt authentication

在 LighterApi 專案的 Startup.cs 中配置新增服務

ConfigureServices

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)    .AddJwtBearer(        options => options.TokenValidationParameters = new TokenValidationParameters        {            ValidateIssuer = true, // 是否驗證 Issuer            ValidateAudience = true, // 是否驗證 Audience            ValidateLifetime = true, // 是否驗證失效時間            ClockSkew = TimeSpan.FromSeconds(30),            ValidateIssuerSigningKey = true, // 是否驗證 SecurityKey            ValidAudience = "https://localhost:6001",            ValidIssuer = "https://localhost:6001",            IssuerSigningKey =                new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret88secret666")) // 拿到 SecurityKey        });

Configure

app.UseAuthentication();app.UseAuthorization();

新增標籤 [Authorize]

[Authorize]public class ProjectController : ControllerBase

透過 postman 呼叫介面,返回 401 Unauthorized

需要透過登入介面獲取 token,再帶上 token 訪問

JWT 認證什麼是 JWT頒發 token 程式碼示例什麼是 JWT

JWT 是一個 token,由三部分組成,格式為 xxx.yyy.zzz

Header(algorithm + type)Payload(claims)Singature頒發 token 程式碼示例
namespace LighterApi.Controller{    [ApiController]    [Route("api/[controller]")]    public class IdentityController : ControllerBase    {        [HttpPost]        [Route("signin")]        public IActionResult SignIn()        {            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret88secret666"));            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);            var token = new JwtSecurityToken(                issuer: "https://localhost:6001",                audience: "https://localhost:6001",                new List<Claim> {new Claim("name", "mingson")},                expires: DateTime.Now.AddMinutes(120),                signingCredentials: credentials);            return Ok(new JwtSecurityTokenHandler().WriteToken(token));        }    }}

啟動程式,訪問介面,獲取 token

透過官網解析

帶上 token 訪問介面

授權

為介面新增訪問需要的角色,具備角色才能訪問

[Authorize(Roles = "Administrators, Mentor")]

SignIn 介面返回 token 中加入角色

new Claim(ClaimTypes.Role, "Administrators"),

啟動程式,獲取包含角色的 token

帶上 token 訪問需要角色的介面

GitHub原始碼連結:

https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 介面開發小技巧放送 - 如何在覆蓋表單上顯示自定義按鈕