손 으로 AspNetCore WebApi 인증 및 권한 수여 방법 을 알려 드릴 게 요.
5122 단어 NetCoreWebApi인증권한 을 부여 하 다
요 며칠 동안 샤 오 밍 은 또 고민 이 생 겼 다.그 전에 샤 오 홍 의 인터페이스 에 인증 권한 을 부여 하지 않 고 알몸 으로 온라인 으로 달 려 갔다.마 사장 에 게 들 킨 후에 심하게 욕 을 했 고 샤 오 밍 에 게 권한 을 부여 하 라 고 했다.서둘러 Baidu 를 보 니 모두 가 JWT 인증 으로 권한 을 수 여 받 고 있 는데 이것 은 자신 에 게 매우 적합 하 다.
토 큰 이 뭐야?
Token 은 서버 에서 생 성 된 문자열 로 클 라 이언 트 가 요청 하 는 영패 입 니 다.첫 번 째 로그 인 후 서버 에서 Token 을 생 성하 면 이 Token 을 클 라 이언 트 에 게 되 돌려 줍 니 다.이후 클 라 이언 트 는 이 Token 을 가지 고 와 서 데 이 터 를 요청 하면 됩 니 다.사용자 이름과 비밀 번 호 를 다시 가 져 오지 않 아 도 됩 니 다.
JWT 가 뭐야?
JSon web token(JWT)은 네트워크 응용 환경 에서 성명 을 전달 하기 위해 실 행 된 JSON 기반 의 개방 기준(RFC 7519)입 니 다.이 token 은 치밀 하고 안전 하 며 분포 식 사이트 의 단일 로그 인(SSO)장면 에 특히 적 용 됩 니 다.JWT 의 성명 은 일반적으로 신분 제공 자 와 서비스 제공 자 간 에 인 증 된 사용자 신분 정 보 를 전달 하여 자원 서버 에서 자원 을 얻 을 수 있 도록 하고 다른 업무 논리 에 필요 한 성명 정 보 를 추가 할 수 있 으 며 이 token 은 인증 에 직접 사용 할 수도 있 고 암호 화 될 수도 있다.
JWT 인증 절차
그림 에서 알 수 있 듯 이 주로 두 부분 으로 구성 된다.1.Token 을 얻 고 2.Token 을 통 해 권한 을 부여 한다.
JWT 인증 사용
우선 JwtBearer 패 키 지 를 설치 합 니 다.
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer --version 3.1.0
다음은 설정 클래스 를 정의 합 니 다.저 는 간단하게 상수 로 대체 하기 위해 설정 파일 에 넣 을 수 있 습 니 다.
public class TokenParameter
{
public const string Issuer = " ";//
public const string Audience = " ";//
public const string Secret = "1234567812345678";//
public const int AccessExpiration = 30;//AccessToken ( )
}
다음은 사용자 이름과 비밀 번 호 를 통 해 Token 을 가 져 오 는 컨트롤 러 를 정의 합 니 다.
[Route("api/oauth")]
[ApiController]
public class OAuthController : ControllerBase
{
/// <summary>
/// Token
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("token")]
public ActionResult GetAccessToken(string username, string password)
{
// 。 。
if (username != "admin" || password != "admin")
return BadRequest("Invalid Request");
var claims = new[]
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Role, ""),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(TokenParameter.Secret));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var jwtToken = new JwtSecurityToken(TokenParameter.Issuer, TokenParameter.Audience, claims, expires: DateTime.UtcNow.AddMinutes(TokenParameter.AccessExpiration), signingCredentials: credentials);
var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);
return Ok(token);
}
}
다음은 Token 인증 을 용기 에 추가 합 니 다(Startup.Configure Services).
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,// securityToken SecurityKey
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(TokenParameter.Secret)),//
ValidateIssuer = true,//
ValidIssuer = TokenParameter.Issuer, //
ValidateAudience = true, //
ValidAudience = TokenParameter.Audience,//
ValidateLifetime = true,//
};
});
다음은 미들웨어(Startup.Configure)에 인증 을 추가 합 니 다.
app.UseAuthentication();// app.UseAuthorization();
다음은 컨트롤 러 가 제어 권한 을 부여 하여[Authorize]를 추가 해 야 합 니 다.
[HttpGet("{id}")]
[Authorize]
public async Task<ActionResult<Todo>> GetTodo(Guid id)
{
var todo = await context.Todo.FindAsync(id);
if (todo == null)
{
return NotFound();
}
return todo;
}
마지막 으로 인 터 페 이 스 를 테스트 해 보 자.효 과 는 다음 과 같다.이 때 401 로 돌아간다.인증 이 통과 되 지 않 아 인증 이 효과 가 있 었 다 는 뜻 이다.
다음은 GetAccessToken 인 터 페 이 스 를 방문 하여 Token 을 받 고 GetTodo 인 터 페 이 스 를 방문 할 때 Token 을 넣 으 면 방문 이 성공 한 것 을 볼 수 있 습 니 다.
작은 매듭
지금까지 샤 오 밍 은 권한 수여 인증 을 마 쳤 으 니 어서 마 사장 에 게 업 무 를 보고 하 러 가자.물론 이 권한 수여 인증 은 매우 간단 합 니 다.그리고 기다 리 는 친구 들 이 발굴 합 니 다.예 를 들 어 Token 을 어떻게 자동 으로 갱신 합 니까?어떻게 Token 의 실 효 를 강제 합 니까?OAuth 다른 실현 방식 등등?여러분 이 관심 이 있 으 면 샤 오 밍 에 게 다음 에 알려 달라 고 하 세 요.
여기 서 AspNetCore WebApi 인증 과 권한 수여 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 AspNetCore WebApi 인증 과 권한 수여 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ASP.NET Core 확장 라이브러리의 Http 로그 사용 상세 정보서버 로그는 요청 중간부품을 통해 완성되며, 중간부품은 Trace 단계로 요청과 응답 상세한 상황을 기록하고 Debug 단계로 요청 시간을 기록합니다.서비스 요청 로그의 이름은 ServerRequest입니다.Logg...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.