OAuth
Open Authorization 의 약자로 인증을 위한 개방형 프로토콜입니다.
대표적으로 구글, 페이스북, 카카오, 네이버 등에서 간편 로그인을 제공합니다.
역할
OAuth는 아래 4개의 역할이 각자의 임무를 수행합니다.
이름 | 역할 |
Resource Owner | Third-Party Application 에 회원가입이 되어있는 일반 사용자를 생각하면 됩니다. Client가 제공하는 어플리케이션을 사용합니다. |
Client | Resource Owner의 개인정보를 토대로 Authorization Server에 접근 요청을 합니다. |
Authorization Server | 권한을 관리해주는 서버입니다. 클라이언트의 권한을 파악하여 접근을 통제하고 Access Token을 발급하여 권한을 부여합니다. |
Resource Server | 사용자의 개인정보를 가지고있는 서버입니다. |
Client
해당 포지션의 대부분이 OAuth 기능을 사용하여, 어플리케이션을 사용하는 Resource Owner로 부터 편리함을 제공해주려는 분들이실겁니다. 하지만 그전에 Client는 해주어야할 작업이 있는데요. Third-Party의 방침에 따라 그들이 원하는대로의 등록 작업을 거쳐야합니다. 각각의 방침들을 잘 따라 등록해주면 되는데, 그 방침들 중에도 공통적인 면이 있어 적어보려합니다.
Client ID : Client 가 만들고 있는 Application을 식별하는 식별자입니다.
Client Secret : Client ID에 대한 비밀번호입니다. Client ID는 노출되도 크게 위험은 없지만 Client Secret의 경우 노출되면 안됩니다.
Authorized redirect URIs : Authorization Server가 권한을 부여하는 과정에서 Authorized Code를 전달해줄 주소입니다. 따라서 Authorization Server는 해당 주소가 아닌 주소에서 요청을 하면 무시합니다.
다른 블로그들을 참고하여 등록과정을 진행할 때 위의 3가지는 꼭 상기하고 계시면 시스템을 이해하는데 더욱 도움을 줄겁니다.
Resource Owner의 승인
Resource Owner가 Client의 Application에 접근하는 과정에서 Resource Server의 서비스를 사용해야 될 때가 있습니다. 예를들어 구글 캘린더에 글을 기록한다던지 네이버 블로그에 글을 등록한다던지하는 서비스를 사용할 때가 됐을 때, Client는 Resource Owner에게 해당 기업의 로그인 버튼을 보여줄겁니다.
로그인 버튼의 링크는 https://resource.server/?client_id=#Client ID&scope=#어떤서비스인지&redirect_uri=#Authorized redirect URIs 로 해두면 되겠습니다.
그렇게 Resource Owner가 해당 버튼을 누르게 되면, Authorization Server는 로그인이 되어있지 않다면 로그인 폼을 보여주게됩니다. 로그인에 성공한다면 위 링크의 client_id 값과 redirect_uri 를 확인하여 일치하는 정보가 있는지 파악합니다. 정확한 정보라면 사용자를 구별할 수 있는 식별자 user_id와 사용하고 싶은 서비스인 scope를 저장해둡니다.
Authorization Server의 승인
Resource Server는 Resource Owner의 웹 브라우저에게 https://cilent/callback?code=3 과 같이 Redirection을 요청합니다.
여기서 code가 Authorization code인데 해당 주소로 Resource Owner가 이동했으니 Client가 Authorization code를 알 수 있게됩니다. 그럼 이제 Client는 Authorization code와 Client ID, Client Secret, Redirect URI를 같이 보내주어 Authorization Server에게 Access Token을 요청합니다.
Access Token 발급
Client로 부터 온 요청을 파악하고 정확한 정보라면 Access Token을 Client에게 발급합니다. 여기서 Access Token의 역할을 되세겨보면 Access Token 은 user_id 가 Third-Party가 가지고있는 scope 서비스를 사용할 수 있는 권한이 있다 라는것을 보장해주는 토큰입니다.
이제 각각의 API에 Access Token을 담아 보내면 해당 권한이 필요한 서비스에 접근할 수 있을겁니다!
Authorization Code Grant
해당 그림이 널리 알려진 OAuth의 과정을 담은 그림입니다. 필자는 해당 그림을 먼저 봤을 때 잘 이해가 되지않았지만 위의 내용을 숙지하고 그림을 봤을때는 상황을 하나하나 대입해서 이해가 잘 됐던것 같습니다.
● 참고자료 : https://www.youtube.com/watch?v=hm2r6LtUbk8&t=18s
'Spring Security' 카테고리의 다른 글
[Spring Security] 보안 알고리즘 (2) | 2023.01.23 |
---|---|
[Spring Security] Cors (0) | 2023.01.15 |
[Spring Security] Security Session (0) | 2023.01.15 |