.Net Core 공식 JWT 권한 수여 검증 의 전 과정
9522 단어 jwt권한 을 부여 하 다검증 하 다.
JSON 웹 토 큰(JWT)은 개방 기준RFC 7519으로 치밀 하고 자체 적 으로 포 함 된 방식 을 정의 하여 각 측 간 에 정 보 를 안전하게 전송 하 는 데 사용 된다.이 정 보 는 디지털 서명 을 거 쳤 기 때문에 검증 과 신뢰 를 받 을 수 있다.비밀(HMAC 알고리즘 사용)을 사용 하거나 RSA 또는 ECDSA 의 공개 키/비밀 키 를 사용 하여 JWT 에 서명 할 수 있 습 니 다.
비록 JWT 를 암호 화하 여 쌍방 간 의 기밀 성 을 제공 할 수 있 지만,우 리 는 이미 서명 한 영패 에 중점 을 둘 것 이다.서명 한 토 큰 은 그 안에 포 함 된 성명 의 완전 성 을 검증 할 수 있 고 암호 화 된 토 큰 은 이 성명 을 다른 측 앞 에 숨 길 수 있 습 니 다.공개 키/비밀 키 를 사용 하여 토 큰 에 서명 할 때 서명 은 비밀 키 를 가 진 쪽 만 이 서명 하 는 쪽 임 을 증명 합 니 다.안전성 이 부족 하기 때문에 비밀번호 와 같은 민감 한 정 보 를 영패 에 넣 을 수 없다.
JWT 는 언제 사용 해 야 합 니까?
다음은 JSON Web 영패 가 유용 한 경우 입 니 다.
JSON Web 토 큰 은 치밀 한 형식 으로 세 부분 으로 구성 되 는데 이 부분 들 은 점(.)으로 나 뉘 는데 각각 다음 과 같다.
xxxxx.yyyyy.zzzzz
헤더:보통 두 부분 으로 구성 되 어 있 으 며 토 큰 형식 과 사용 하 는 서명 알고리즘 입 니 다.
{
"alg": "HS256",
"typ": "JWT"
}
유효 부하:세 가지 설명 유형 이 있 습 니 다.미리 정 의 된 성명,공공 성명 과 개인 성명 이 있 습 니 다.성명 이름 은 단지 세 글자 에 불과 하 다.왜냐하면 JWT 는 치밀 하기 때문이다.예 를 들 어 HMAC SHA 256 알고리즘 을 사용 하려 면 다음 과 같은 방식 으로 서명 을 만 듭 니 다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
서명 은 메 시 지 를 검증 하 는 데 사 용 됩 니 다.이 과정 에서 변경 되 지 않 았 고 비밀 키 를 사용 하여 서명 한 토 큰 에 대해 서 는 JWT 의 발송 자가 말 한 정체 임 을 검증 할 수 있 습 니 다.다음 과 같이 조합 하면 출력 은 점 으로 구 분 된 Base 64-URL 문자열 세 개 입 니 다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjUyMDAiLCJhdWQiOlsiYXBpIiwiYXBpIl0sIkd1aWQiOiIzM2NhZmJkNS1jZWEyLTRjOWMtYWZlYS01MDYyZjM3YWUyOTAiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOlsic3lzdGVtIiwiYWRtaW4iXSwiZXhwIjoxNjA2NjU2NjI0fQ.
JvDHuowbOnWiyxMIFc9gG5rw1LSSc0xx68L31oRfxS0
어떻게 JWT 를 사용 합 니까?사용자 가 보 호 된 경로 나 자원 에 접근 하려 고 할 때마다 사용자 대 리 는 JWT 를 보 내야 합 니 다.보통 로 딩 모드 를 사용 하여 Authorization 헤더 에 JWT 를 보 냅 니 다.헤더 의 내용 은 다음 과 같다.
Authorization: Bearer <token>
어떤 상황 에서 이것 은 무상 태 권한 수여 메커니즘 일 수 있다.서버 의 보호 루트 는 Authorization 헤더 에서 유효한 JWT 를 검사 하고,존재 할 경우 보 호 된 자원 에 접근 할 수 있 도록 합 니 다.JWT 가 필요 한 데 이 터 를 포함 하고 있다 면 데이터베이스 의 일부 조작 에 대한 수 요 를 줄 일 수 있다.비록 이런 상황 이 항상 그렇지 는 않 지만.토 큰 이 Authorization 헤더 에서 보 낸 것 이 라면 도 메 인 간 자원 공유(CORS)는 쿠키 를 사용 하지 않 기 때문에 문제 가 되 지 않 습 니 다.
다음 그림 은 JWT 를 가 져 와 API 나 자원 에 접근 하 는 방법 을 보 여 줍 니 다.
.net core 의 JWT 인증 권한 부여
.net core webapi 프로젝트 를 직접 만 듭 니 다.제 버 전 은 3.1 입 니 다.
1.nuget 설치 먼저 사용:Microsoft.AspNetCore.Authentication.JwtBearer.버 전과.net core 버 전의 호 환 에 주의 하 십시오.net 5 는 5.0.0+버 전 을 지원 합 니 다.그렇지 않 으 면 사용 할 수 있 는 낮은 버 전 을 사용 하 십시오.
2.apptsettings.json 프로필 에 우리 의 JWT 설정 인 자 를 다음 과 같이 쓰 십시오.
"Jwt": {
"Secret": "your-256-bit-secret",
"Iss": "https://localhost:44355",
"Aud": "api"
}
3.Startup.cs 의 Configure Services 방법 에 인증 을 다음 과 같이 추가 합 니 다.
var jwtConfig = Configuration.GetSection("Jwt");
//
var symmetricKeyAsBase64 = jwtConfig.GetValue<string>("Secret");
var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);
var signingKey = new SymmetricSecurityKey(keyByteArray);
//
services.AddAuthentication("Bearer")
.AddJwtBearer(o =>
{
o.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,// , ,
IssuerSigningKey = signingKey,//
ValidateIssuer = true,// , Iss ValidIssuer
ValidIssuer = jwtConfig.GetValue<string>("Iss"),//
ValidateAudience = true,// , Aud ValidAudience
ValidAudience = jwtConfig.GetValue<string>("Aud"),//
ValidateLifetime = true,// ,
ClockSkew = TimeSpan.Zero,// , , , , + , 7 , 0
RequireExpirationTime = true,
};
});
Configure 방법 에 app.UseAuthentication()과 app.UseAuthorization()을 추가 합 니 다.위치 에 놓 을 위 치 를 주의 하 십시오.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>{ endpoints.MapControllers();});
}
4.jwt 토 큰 을 만 들 고 기본 으로 생 성 된 컨트롤 러 Weather ForecastController 에 토 큰 을 만 드 는 방법 을 추가 합 니 다.
[HttpPost]
public IActionResult Authenticate()
{
var jwtConfig = Configuration.GetSection("Jwt");
// , , Hmacsha256 , 256bit
var securityKey = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtConfig.GetValue<string>("Secret"))), SecurityAlgorithms.HmacSha256);
//Claim,JwtRegisteredClaimNames , Guid .
//ClaimTypes role、email、name。Role ,
//
var claims = new Claim[] {
new Claim(JwtRegisteredClaimNames.Iss,jwtConfig.GetValue<string>("Iss")),
new Claim(JwtRegisteredClaimNames.Aud,jwtConfig.GetValue<string>("Aud")),
new Claim("Guid",Guid.NewGuid().ToString("D")),
new Claim(ClaimTypes.Role,"system"),
new Claim(ClaimTypes.Role,"admin"),
};
SecurityToken securityToken = new JwtSecurityToken(
signingCredentials: securityKey,
expires: DateTime.Now.AddMinutes(2),//
claims: claims
);
// jwt
return Content(new JwtSecurityTokenHandler().WriteToken(securityToken));
}
5.jwt 를 사용 하여 인터페이스의 접근 을 제어 합 니 다.우 리 는 하나의 인터페이스 에 하나의 특성 을 추가 합 니 다.[Authorize(Roles="admin")]는 admin 이라는 캐릭터 의 jwt 토 큰 이 있어 야 접근 할 수 있다 는 뜻 입 니 다.roles 인자 가 없 으 면 사용 가능 한 토 큰 이면 접근 할 수 있 고 여러 개의 role 캐릭터 가 여러 가지 특성 을 중첩 할 수 있 습 니 다.
[HttpGet]
[Authorize(Roles = "admin")]
[Authorize(Roles = "system")]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
6.테스트 를 한 후에 우 리 는 postman 으로 테스트 할 수 있 습 니 다.매우 성공 적 이 고 데이터 가 있 는 것 을 볼 수 있 습 니 다.진급 하 다
인증 할 때 이 벤트 를 추가 할 수 있 습 니 다.예 를 들 어 아래 인증 실패 이벤트,수신 매개 변수 이 벤트 는 http 요청 헤더 의 Authorization 이 아 닌 url 의 인 자 를 토 큰 으로 가 져 올 수 있 습 니 다.
services.AddAuthentication("Bearer")
.AddJwtBearer(o =>
{
o.Events = new JwtBearerEvents()
{
OnMessageReceived = context =>
{
context.Token = context.Request.Query["access_token"];
return Task.CompletedTask;
},
OnAuthenticationFailed = context =>
{
// , < > ,
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
};
});
총결산여기 서.Net Core 공식 JWT 권한 수여 검증 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 이 있 습 니 다.Net Core 공식 JWT 권한 수여 검증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Djoser로 인증Django 인증 시스템의 REST 구현. djoser 라이브러리는 Django Rest Framework 보기 세트를 제공하여 등록, 로그인, 로그아웃, 비밀번호 재설정 및 계정 활성화와 같은 기본 작업을 처리합니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.