-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
B2B Authentication / Authorization #3
Comments
질문
|
RefreshToken 의 등장 배경이, AccessToken 의 만료기간이 긴 상태에서 탈취 당하게 되면 보안상 문제가 있기 때문에 AccessToken 의 만료기간을 짧게 가져가서 보안상의 이점을 누리기 위해서 등장한 것입니다. 따라서 RefreshToken 은 보통 클라이언트 쪽에서도 하나 가지고 있고, Redis 같은 In-memory DB 에서도 관리를 하는데, 클라이언트에서 AccessToken 보다 만료 시간이 긴 RefreshToken 을 탈취 당하게 되면, 해커는 RefreshToken 만료가 되기까지 계속 AccessToken 을 재발급 받을 수 있겠죠 ?ㅎㅎ
위와 같은 문제점 때문에 로그인할 때, 새로 RefreshToken 을 발급하고, 발급과 동시에 DB 에 저장하는 것이죠. 그리고 재발급시에 클라이언트에서 보낸 RefreshToken 이 DB 에 저장된 것과 동일한지 확인하는 것이고요. 따라서, 다른 환경에서 새로 로그인한 경우에는 기존 로그인 된 상태에서 관리되던 RefreshToken 은 만료기간이 남아있더라도 재사용할 수 없겠죠 ㅎㅎ 따라서, 첫 로그인 후 일정 시간 지나고 혹은 로그아웃 시에 RefreshToken 을 제거하게 되면 해커가 AccessToken 을 재발급할 수 없겠죠 !
accessToken 은 Redis 에서 관리하진 않습니다. accessToken 은 클라이언트에서만 관리되는 토큰이고요, refreshToken 만 Redis 에 존재합니다. |
|
존재 유무만 판단해서 재발급해준다면, 해커가 악의적으로 이용할수 있겠죠 ?!, 만약에 RefreshToken 이 유효하지 않다면 재로그인을 하라고 유도해야할 것입니다. 보통 RefreshToken 은 요청응답이 자주 발생하지 않아서 AccessToken 보다는 탈취 당할일이 훨씬 적을 것이고, 클라이언트에서 안전하게 보관한다면 쉽게 탈취 당하진 않겠죠? ㅎㅎ
쉽게 인증 Redis 와 인가(권한) Redis 를 따로 구분하는 것입니다. MSA 의 핵심이 SRP 인데, 그런 관점에서 분리되는게 좋지 않을까 생각합니다. 즉, 서버/DB 가 적절하게 분리된다면 인증 쪽에서 문제가 생기더라도 인가쪽은 건드리지 않아도 되겠죠? |
정호님..ㅎ 같은 질문일거같은데,,ㅎㅎ 답변중에
refreshToken 은 서버(redis)에서 관리되지 않는다는거구 refreshToken의 유효성 체크 시점이 accessToken이 만료되었을때 refreshToken 으로 accessToken 재발급 요청할때 --> 이때 refreshToken 의 유효성 체크는 어떤게 체크되는거에여? |
|
질문
|
로그아웃도 필요 없고, 인증했던 유저정보를 UPDATE 쳐주는 것도 아닙니다 :)
admin 이 객실을 수정하고 싶어서 b2b-service 로 token 을 보내서 요청할 것입니다. 그러면 b2b 서비스에서 AccessToken 을 검증할 것이고, 그 과정에서 뽑아낸 ID 값을 Payload 에 담아서 권한 서버로 요청하면, ID 값을 이용해서 자신의 권한을 뽑아오는 것이죠.
즉, admin 의 요청마다 발생하기 때문에 유저정보 혹은 권한 정보가 UPDATE 되더라도 사용자에게 재로그인하라고 할 필요가 없는 거죠 ㅎㅎ
그러한 로직을 구현할 수도 있고 혹은, DB 에서 변경이 발생하면 Trigger 같은 형식으로도 구현할 수 있지 않을까 생각합니다 ㅎㅎ |
B2B Authentication/Authorization
The text was updated successfully, but these errors were encountered: