ASP.NET Core 학습 의 사용 JWT 인증 권한 부여 상세 설명
5998 단어 jwt인증권한 을 부여 하 다
인증 권한 수 여 는 많은 시스템 의 기본 적 인 기능 입 니 다.예전 에 PC 시대 에 쿠키-session 과 같은 방식 으로 인증 권한 수 여 를 실 현 했 습 니 다.그 때 는 시스템 의 사용자 수가 많 지 않 았 기 때문에 이런 방식 도 잘 작 동 되 었 습 니 다.현재 소프트웨어 사용자 수가 점점 많아 지면 서시스템 구조 도 이전 수직 확장(서버 성능 증가)->수평 확장(서버 수 증가)
cookies-session 작업 방식
클 라 이언 트 가 사용자 정 보 를 제출 합 니 다->서버 식별 사용자->서버 에서 사용자 정 보 를 저장 합 니 다->session-id 클 라 이언 트 로 돌아 갑 니 다->클 라 이언 트 가 session-id 를 저장 합 니 다->요청 할 때마다 cookies 에 session-id 를 가 져 옵 니 다
이 방식 도 수평 으로 확장 할 수 없 는 것 이 아니다.예 를 들 어 session 복사/제3자 저장 session(데이터베이스,Redis)
명사 해석
인증:사용자 의 합 법 여 부 를 식별 합 니 다.
권한 부여:사용자 권한 부여(어떤 자원 에 접근 할 수 있 는 지)
감 권:감정 권한 이 합 법 적 인지 여부
Jwt 우세 와 열세
우세 하 다.
무상 태
token 은 인증 모든 정 보 를 저장 합 니 다.서버 는 사용자 인증 정 보 를 저장 하지 않 아 도 됩 니 다.서버 의 압력 을 줄 이 고 서버 가 수평 으로 확장 되 기 쉽 습 니 다.상태 가 없 으 면 최대 단점 을 초래 하여 로그아웃 하기 어렵 습 니 다.
2.크로스 도 메 인 접근 지원
Cookie 는 도 메 인 접근 을 허용 하지 않 습 니 다.token 지원
3.언어 간
표준 화 된 JSON Web Token(JWT)을 기반 으로 특정한 언어 에 의존 하지 않 습 니 다.예 를 들 어 Token 을 생 성하 면 여러 언어 에 사용 할 수 있 습 니 다(Net,Java,PHP...)
열세
1.Token 의 유효성 문제
백 스테이지 에서 발 표 된 Token 을 로그아웃 하기 어렵 습 니 다.보통 제3자 저장(데이터베이스/캐 시)을 통 해 로그아웃 을 해 야 합 니 다.그러면 JWT 의 가장 큰 장점 을 잃 게 됩 니 다.
2.대역 폭 차지
Token 길이(저장 내용 에 따라 다 름)비 sessionid 가 크 고 매번 요청 할 때마다 대역 폭 을 많이 소모 합 니 다.token 은 필요 한 정보 만 저장 하고 token 이 너무 길 지 않도록 합 니 다.
3.재계약 이 필요 하 다
cookies-session 은 보통 프레임 워 크 가 재계약 기능 을 실 현 했 습 니 다.매번 에 방문 할 때마다 기한 이 지난 시간 을 갱신 하고 JWT 는 스스로 실현 해 야 합 니 다.OAuth 2 리 셋 Token 체 제 를 참고 하여 리 셋 Token 을 실현 합 니 다.
4、더 많은 CPU 소모
매번 요청 할 때마다 내용 복호화 와 서명 검증 두 단계 작업 이 필요 합 니 다.전형 적 으로 시간 으로 공간 을 바 꿉 니 다.
자신의 사용 장면 에 따라 어떤 인증 방안 을 사용 할 지 결정 할 수 있 을 뿐 통용 되 고 완벽 한 방안 은 없다.
AspNetCore 통합 Jwt 인증
1.가방 추가
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
2.설정 추가
"JwtOptions": {
"Issuer": "https://localhost:5001",
"Audience": "https://localhost:5001",
"SecurityKey": "1G3l0yYGbOINId3A*ioEi4iyxR7$SPzm"
}
3.Jwt Bearer 확장(옵션)
public static AuthenticationBuilder AddJwtBearer(this IServiceCollection services, Action<JwtOptions> configureOptions)
{
if (configureOptions == null) throw new ArgumentNullException(nameof(configureOptions));
var jwtOptions = new JwtOptions()
{
Issuer = "Jwt Authentication",
Audience = "Wilson Pan Web Api",
};
// set customs optoins
configureOptions(jwtOptions);
// update Options
services.PostConfigure<JwtOptions>(options =>
{
options.Issuer = jwtOptions.Issuer;
options.Audience = jwtOptions.Audience;
options.SecurityKey = jwtOptions.SecurityKey;
});
return services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = jwtOptions.Issuer,
ValidAudience = jwtOptions.Audience,
ValidateIssuer = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = jwtOptions.SymmetricSecurityKey
};
});
}
4、ConfigureServices
services.AddJwtBearer(options =>
{
options.Issuer = Configuration.GetValue<string>("JwtOptions:Issuer");
options.Audience = Configuration.GetValue<string>("JwtOptions:Audience");
options.SecurityKey = Configuration.GetValue<string>("JwtOptions:SecurityKey");
});
5、Configure
app.UseAuthentication();
app.UseAuthorization();
6、add AuthorizeController
//define claim
var claims = new Claim[]
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Email, $"{username}@github.com"),
new Claim(ClaimTypes.Role, username == "WilsonPan" ? "Admin" : "Reader"),
new Claim(ClaimTypes.Hash, JwtHashHelper.GetHashString($"{username}:{password}:{System.DateTime.Now.Ticks}")),
};
//define JwtSecurityToken
var token = new JwtSecurityToken(
issuer: _jwtOptions.Issuer,
audience: _jwtOptions.Audience,
claims: claims,
expires: System.DateTime.Now.AddMinutes(5),
signingCredentials: _jwtOptions.SigningCredentials
);
// generate token
var result = new JwtSecurityTokenHandler().WriteToken(token);
7.contrller/Action 인증 권한 추가
[ApiController]
[Authorize]
[Route("[controller]")]
public class ApiController : ControllerBase
{
...
}
[HttpPost]
[Authorize(Roles = "Admin")]
public IActionResult Post()
{
return Ok();
}
Rest Client
dotnet run
1.인증 인터페이스
@host = https://localhost:5001
# @name token
POST {{host}}/Authorize HTTP/1.1
Content-Type: application/x-www-form-urlencoded
#username=Wilson&password=123456
# admin
username=WilsonPan&password=123456
2.권한 부여 인터페이스 필요
### required authorize
GET {{host}}/api HTTP/1.1
Authorization: Bearer {{token.response.body.*}}
3.관리자 역할 인터페이스 필요
### required authorize
POST {{host}}/api HTTP/1.1
Authorization: Bearer {{token.response.body.*}}
예제 코드 총결산
여기 서 ASP.NET Core 학습 의 JWT 인증 사용 권한 수여 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 ASP.NET Core 는 JWT 인증 권한 수여 내용 으로 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node JS에서 액세스 토큰 및 새로 고침 토큰을 사용한 JWT 인증우리 모두는 모든 애플리케이션에서 가장 중요한 기능이 인증이라는 것을 알고 있습니다. 인증을 훨씬 더 안전하게 만들고 더 나은 사용자 경험을 제공하려면 앱에서 새로 고침 및 액세스 토큰 기반 인증을 사용해야 합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.