손 으로 AspNetCore WebApi 인증 및 권한 수여 방법 을 알려 드릴 게 요.

머리말
요 며칠 동안 샤 오 밍 은 또 고민 이 생 겼 다.그 전에 샤 오 홍 의 인터페이스 에 인증 권한 을 부여 하지 않 고 알몸 으로 온라인 으로 달 려 갔다.마 사장 에 게 들 킨 후에 심하게 욕 을 했 고 샤 오 밍 에 게 권한 을 부여 하 라 고 했다.서둘러 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 인증 과 권한 수여 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!

좋은 웹페이지 즐겨찾기