¿Por qué necesitamos OAuth2. Para desarrolladores de clientes | de Jinwoo | Noviembre de 2020

이번에 회사 에서 로그인 관련 작업 을 할 일 이 있어서 OAuth2 를 사용 하게 되었습니다. 하지만 저는 OAuth2 에 대해서 거의 몰랐었 습니다. 왜냐하면 로그인 관련 작업 을 할 때 Id, contraseña 만 넘겨 주고 JWT 발급 받고 Actualización 작업 까지만 했었기 때문 입니다.

솔직히 창피 하지만 그동안 «난 클라이언트 니까 하하!» 라는 생각 으로 보안 은 딱히 고려 하지도 않았고 로그인 이 동작 한다 에 만족 했었 습니다.

그런데 생각 해보니 로그인 이라는 기능 은 서비스 에서 가장 대표 되는 사용자 인증 과정 이자 보안 적 으로 많은 고민 이 필요한 기능 이었습니다. 그래서 많은 사람들 의 고민 끝에 탄생 한 OAuth2 에 대해 알아 보기 로 하였습니다.

OAuth 는 간단히 말해 API 인증 과 사용자 인증 을 위해 OpenID 로 개발 된 스탠다드 프로토콜 중 하나 입니다. 이렇게 말하면 어려우 니까 일반적인 로그인 과 다른 점 은 무엇 인지 부터 짚고 갑시다.

¿Qué es diferente de Just Login?

로그인 은 당 서비스 내 에서만 동작 하는데 에 반해 OAuth2 는 내 서비스 에서 다른 서비스 의 OAuth2 인증 절차 를 거치면 그 서비스 에서 제공 하는 API 를 사용할 수 있다는 것 입니다. 이해 하기 쉽게 Google Open Api 나 Kakao Open Api 등 을 OAuth2 의 대표적인 예로 들 수 있습니다. 그러면 왜 하필 이면 OAuth2 를 사용 하는 걸까요?

Por qué usar OAuth2

OAuth2 를 사용 하는 가장 큰 이유 는 우리 의 개인 정보 를 지키기 위해서 입니다. 많은 서비스 들 에서 계정 을 만들어서 사용 한다 하고 가정 하면, 계정 이 너무 많아 져 Id, Password 관리 가 어려워 지고 만 에 하나 그 서비스 들 중 하나 가 이 이 제대로 갖추어져 있 있 않았다면 개인 정보 유출 로 피해 를 입을. 그렇기 때문에 우리 는 OAuth2 의 특성 을 통해 보안 이 믿을 만한 서비스 에서 인증 을 받는 것 입니다.

Lo que necesita saber antes de saber el tipo de OAuth2

OAuth2 의 모든 인증 절차 는 다음 것들 로 구성 됩니다.

  • Propietario del activo: aplicación de terceros 을 이용하는 사용자 입니다. 이 사용자 의 대한 정보 는 Servidor de recursos 에 있습니다.

또, 이들이 주고 받는 것들은 다음 것들 입니다.

  • ID de cliente: Resource Server 에 미리 등록 된 Client 의 고유 값 입니다. 이름 그대로 Id 의 역할 을 합니다.

용어 들을 처음 보면 이해 되지 않고 이상 하다고 생각 되는 것 투성이 입니다. 또, 하나 의 용어 를 이해 하려고 하면 다른 용어 를 알아야 하고 그 용어 또한 이 것이 반복 되어서 더욱 이해 하기 어렵 습니다.

하지만 시야 를 전체 에 두고 위 의 설명 을 곱 씹으 면서 서로 주고 받는 것들을 그리다 보면 이해 하실 거라 생각 됩니다.

OAuth2 는 4 가지 의 인증 방식 으로 이루어져 있습니다.

Tipo de concesión del código de autorización

가장 대표적인 인증 방식 입니다.

Cliente 는 토큰 보다 Código de autorización 를 먼저 발급 받아야 합니다. Código de autorización 는 ID de cliente, Redirigir Uri 를 Servidor de autorización 에 요청 하면 발급 받을 수 있습니다. 그러고 이 Code 를 아까 보냈던 요소 들 과 Client Secret 을 함께 다시 요청 을 보내야 Access Token 을 발급 받아 Resource Server 의 Api 를 사용할 수 있습니다.

Tipo de subvención implícita

자체 Servidor 가 없는 Aplicación web JavaScript 이 Cliente 일 때 사용 됩니다.

Código de autorización Tipo de concesión 의 Código de autorización 를 발급 할 때 와 같은 파라미터 로 요청 을 보내면 사용자 의 동의 과정 을 거친 후 바로 Token de acceso 을 발급 해줍니다. 다만 간단한 만큼 Cliente 가 토큰 을 안전하게 보관할 수 없기 때문에 Actualizar Token 은 발급 되지 않습니다.

Tipo de concesión de credenciales de contraseña al propietario del recurso

우리 가 흔히 아는 Id 와 Contraseña 를 통해서 인증 이 진행 되는 방식 입니다.

요청 을 보낼 때 Id 와 Password 로 인증 이 진행 된다 된다 Id de cliente 와 Secreto 은 필요 합니다. 그리고 요청 이후 Servidor de autorización 로부터 바로 Token de acceso 을 발급 받습니다.

이 인증 방식 을 사용할 때는 Resource Server 와 Authorization Server 가 다른 서비스 일 때는 사용 하지 말고 동일한 서비스 내 에서 사용해야 합니다. 왜냐하면 Id 와 Contraseña 를 이용 하기 에 서로 다른 서비스 일 경우 엔 안전하게 보관 되지 못할 수 있기 때문 입니다.

(아마 사내 에서 사용 한다고 하면 이 인증 방식 일 것 입니다.)

Tipo de concesión de credenciales de cliente

사용자 의 Recurso 대신 Cliente 자체 의 Recurso 를 활용할 때 사용 하는 인증 방식 입니다.

Tipo de concesión de credenciales 은 Cliente 의 정보 에 접근 하기 위한 것으로 Servidor de autorización 에 등록 된 Cliente 라면 그냥 사용할 수 있습니다. 당연히 사용자 와 연관 이 없기 때문에 Update Token 은 발급 은 되지 않습니다. 그렇지만 토큰 이 만료 되면 자체적 으로 Token de acceso 을 발급 받을 수 있습니다.

OAuth2 를 공부 하고 나니 제가 알고 있는 Open Api 들이 어떻게 동작 하는지 이해 가 이외에도 어느 곳 에서, 어떤 때에 사용해야 한다는 것도 알게 되었습니다. (서버 개발자 분들 존경 을 표 합니다 …)

저는 개발자 로서 서로 이해 하는 것이 중요 하다고 생각 합니다. 아무리 클라이언트 개발 을 하는 사람 이라도 Api 구성 이 왜 이렇게 되었는지 는 이해 하고 있어야 되고 관계 없이 이런 소통 을 주고 받아야 개개인 이 성장 하고 그 조직 과 서비스 도 성장 한다고 믿고 있습니다.

이런 저 에게 있어서 이번 OAuth2 학습 은 꽤 의미 있었습니다. 클라이언트 개발자 로서 한번도 고려 해보지 못했던 사용자 인증 방식 에 눈 을 뜨게 되었고 견문 이 넓어 지는 경험 을 한 것이 니까요.

그래서 서버 공부 를 많이 하려고 하는데 시간 이 안 나네요 ㅎ… 🙁

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *