인증이란 유저의 identification을 확인하는 절차이다.
- 인증을 하기 위해선 먼저 유저의 아이디와 비번을 생성할 수 있는 기능이 필요
- 유저 아이디와 비번 생성
- 유저 비번 암호화 해서 DB에 저장 (회원가입)
- 유저 로그인 -> 아이디와 비밀번호 입력
- 유저가 입력한 비밀번호 암호화 한후 암호화되서 DB에 저정된 유저 비밀번호와 비교.
- 일치하면 로그인 성공
- 로그인 성공하면
access token
을 클라이언트에게 전송.- 유저는 로그인 성공후 다음부터는
access token
을 첨부해서 request를 서버에 전송함으로서 매번 로그인 해도 되지 않도록 한다.
앞서 언급했듯이 유저가 로그인에 성공한 후에는 access token
이라고 하는 암호화된 유저 정보를 첨부해서 response로 보낸다.
POST /auth HTTP/1.1
Host: localhost:5000
Content-Type: application/json
{
"username": "joe",
"password": "pass"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E"
}
access token
을 복호화 해서 해당 유저 정보를 얻게 된다.예를들어 access token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E
를 복호화 하면 다음과 같은 정보를 얻는다:
{
user_id : 1
}
복호화해서 얻은 유저 아이디를 통해 해당 유저가 누군지 알 수 있다.
access token
을 생성하는 방법은 여러가지가 있는데, 그 중 가장 널리 사용되는 기술중 하가 바로 JWT(JSON Web Tokens)이다.인가란 유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차이다.
- 예를 들어, 해당 유저는 고객 정보를 볼 수 있는 있지만 수정 할 수는 없다 와 같이 내가 할 수 있는 행동을 제한하는 역할을 하기도 한다.
- 인가도 JWT를 통해서 구현할 수 있습니다. access token을 통해 해당 유저 정보를 얻을 수 있음으로 해당 유저가 가지고 있는 권한(permission)도 확인 할 수 있다.
인가 절차
- Authentication 절차를 통해
access token
을 생성한다.access token
에는 유저 정보를 확인할 수 있는 정보가 들어가 있어야 한다 (예를 들어 user id).- 유저가 request를 보낼때
access token
을 첨부해서 보낸다.- 서버에서는 유저가 보낸
access token
을 복호화 한다.- 복호화된 데이터를 통해 user id를 얻는다.
- user id를 사용해서 database에서 해당 유저의 권한(permission)을 확인하다.
- 유저가 충분한 권한을 가지고 있으면 해당 요청을 처리한다.
- 유저가 권한을 가지고 있지 않으면 Unauthorized Response(401) 혹은 다른 에러 코드를 보낸다.