토큰(Token) 기반 인증은 현대 웹서비스에서 정말 많이 사용한다. 만약 우리가 API를 사용하는 웹서비스를 개발한다면 토큰을 사용하여 유저들의 인증작업을 처리하는것이 가장 좋은 방법이 될 것이다. 이러한 토큰에 대해 좀 더 깊게 알아보자😁
토큰(Token)은 말 그대로 동전이라는 뜻 이지만, 웹 상에서는 특정한 목적으로만 사용 가능한 동전에 일종의 권한
를 주는 것을 말한다.
서버에서는 사용자가 결제한 돈도 오고가서 권한이라는것이 중요하다. 인터넷에 사이트를 올리면 전 세계의 사용자들이나 해커들이 접근 가능한데 사용자들의 돈을 보호하려면 본인만 접근 가능하도록 본인 확인 수단이 필요한데 그 수단으로 토큰을 이용한다.
토큰 기반 인증 시스템을 사용하는 이유?
토큰 기반 인증 시스템을 선택하는데에는 여러가지 이유가 있는데요, 그 중 주요 이유들
Stateless
토큰 기반 인증은 서버에서 사용자의 정보를 가지지 않기 때문에 무상태성을 가져서 서버가 확장을 하여도 문제가 생기지 않게 된다.
상태를 가지는 세션을 사용하는 방식에서 서버를 확장한다면 사용자가 로그인 했을 때, 유저는 처음 로그인한 서버에만 요청하는 문제가 발생할 수 있다. 하지만 토큰을 사용하게 되면 어떠한 서버로 요청이 가도 상관이 없게 된다.
모바일 어플리케이션에 적합하다
Android나 iOS 모바일 어플리케이션을 개발할 때, 안전한 API 를 만들기 위해서는 쿠키 컨테이너를 사용해야 하는 쿠키같은 인증시스템은 이상적이지 않다. 만약 토큰 기반 인증을 도입한다면 더욱 간단하게 이 번거로움을 해결 할 수 있게 된다.
인증정보를 다른 어플리케이션으로 전달한다
대표적인 예제로 OAuth 가 있다. 페이스북/구글 같은 소셜 계정들을 이용하여 다른 웹서비스에서도 로그인 할 수 있게 한다.
보안
토큰 기반 인증 시스템을 사용하여 어플리케이션의 보안을 높일 수 있다. 단, 이 토큰 기반 인증을 사용한다고 해서 무조건 해킹의 위험에서 벗어나는건 아니다.
토큰 기반의 인증은 크게 두가지로 일반 토큰 기반의 인증과 클레임(Claim) 토큰 기반 인증으로 나뉜다.
일반 토큰 기반은 과거에 많이 사용하던 방식으로 주로 의미가 없는 문자열로 구성되어있으며 아래와 같이 표현된다.
a9ace025c90c0da216slgnslkgns232345fgd776
사용할 때에는 아래와 같은 json으로 보내는 방식으로 사용하게 된다.
{
"code": 0,
"msg": null,
"response":{
"token": "a9ace025c90c0da234075da6hhh3492a2fca776",
"now": 1512364340,
"expired_at": 4736238295
}
}
일반 토큰의 특징에 대해 말해보자면 아래와 같은 문제점들을 가지고 있다.
이와 같은 문제점들을 해결하기 위해 나온것이 클레임(Claim) 기반 토큰 방식이다.
클레임이란 사용자 정보나 데이터 속성등을 의미한다.
그래서 클레임 토큰 이라고 하면 토큰 안에 사용자 정보나 데이터 속성들을 담고있는 토큰이라 생각하면 되고, 이런 클레임을 기반한 토큰 중 가장 대표적인 것이 JWT가 있다.
{
"id":"yeon55",
"role":["admin","hr"],
"company":"CampusFriends"
}