Framework/Django

소셜로그인에서 redirect uri는 왜 필요한가?

JM Lee 2024. 3. 16. 00:05
728x90

리디렉션(Redirection)은 웹 서버나 웹 애플리케이션이 클라이언트의 요청을 받았을 때, 해당 요청을 다른 위치로 전송하는 프로세스를 말한다. 즉, 클라이언트가 요청한 URL이나 리소스를 다른 URL이나 리소스로 이동시키는 것을 의미한다.

리디렉션은 보통 다음과 같은 상황에서 발생한다:

  1. 인증 및 인가 프로세스: 사용자가 로그인 페이지로 이동하여 인증을 완료한 후에, 시스템은 사용자를 인증된 페이지로 리디렉션한다.
  2. URL 재작성: 특정 URL에 대한 요청이 있을 때, 서버는 요청된 URL을 다른 URL로 리디렉션하여 요청을 처리합니다. 이는 웹 사이트의 구조 변경이나 특정 페이지의 이동 등에 사용된다.
  3. SEO (검색 엔진 최적화): 서버는 특정 URL에 대한 요청을 다른 URL로 리디렉션하여, 검색 엔진에서의 인덱싱이나 사용자 경험을 개선할 수 있다.

리디렉션은 HTTP 상태 코드를 사용하여 클라이언트에게 전달된다. 일반적으로는 3XX 시리즈의 상태 코드가 사용되며, 특정 상태 코드는 리디렉션의 종류를 나타낸다. 예를 들어, 301 Moved Permanently는 영구적인 리디렉션을 나타내고, 302 Found는 임시적인 리디렉션을 나타낸다.

이러한 방식으로 리디렉션은 웹 애플리케이션 및 웹 서버에서 중요한 역할을 한다.

 


 

URI(Uniform Resource Identifier)인터넷 상의 리소스를 고유하게 식별하기 위한 문자열이다. URI는 리소스의 식별을 위해 사용되며, 이러한 리소스는 웹 상의 웹 페이지, 이미지, 동영상 등 다양한 것들을 포함할 수 있다.

URI는 URL(Uniform Resource Locator)과 URN(Uniform Resource Name) 두 가지 하위 개념으로 구성된다.

  1. URL (Uniform Resource Locator): 인터넷 상의 특정한 위치를 나타낸다. URL은 리소스의 위치를 지정하는데 사용된다. 일반적으로 웹 페이지의 주소를 나타내는데 사용되며, 프로토콜(예: HTTP, HTTPS), 호스트명, 리소스의 경로 등의 정보를 포함한다. 예를 들어, "https://www.example.com/page"는 URL이다.
  2. URN (Uniform Resource Name): 리소스의 이름을 나타낸다. URN은 리소스를 식별하기 위한 고유한 이름을 제공한다. 일반적으로 URN은 리소스의 위치에 상관없이 리소스 자체를 식별하는 데 사용된다. 하지만 현재까지 URN은 널리 사용되지 않고 있다.

예를 들어, "https://www.example.com/page"는 URL이며, "urn:isbn:0451450523"은 URN이다.

 

요약하자면 URI는 웹의 핵심 개념 중 하나로, 웹 상의 모든 리소스를 식별하고 참조하는 데 사용된다.

 


 

위에 리다이렉션과 URI의 뜻을 합쳐서 해석해보면, Redirect URI는 소셜로그인에서 다음과 같은 역할을 수행한다.

 

  1. 인증 완료 후 사용자 리디렉션: 사용자가 소셜 로그인을 완료하면, 인증 서버가 사용자를 원래의 애플리케이션으로 리디렉션해야 한다. Redirect URI는 사용자가 리디렉션될 위치를 정의하며, 사용자 경험을 유지하고 인증 프로세스를 완료하는 데 도움이 된다.
  2. 인증 정보 전달: 소셜 로그인 후에는 보통 애플리케이션에 사용자 정보나 인증 토큰 등이 필요하다. Redirect URI를 통해 이러한 정보를 전달할 수 있다. 일반적으로는 인증 서버가 Redirect URI에 쿼리 매개변수나 fragment 등을 사용하여 정보를 전달한다.
  3. 보안 및 CSRF 공격 방지: Redirect URI를 통해 소셜 로그인 프로세스를 시작한 애플리케이션이 실제로 인증된 사용자를 받는지 확인할 수 있다. 이는 보안 문제나 CSRF(Cross-Site Request Forgery) 공격을 방지하는 데 중요하다.

요약하자면, Redirect URI는 소셜 로그인 프로세스의 완료 및 사용자와 애플리케이션 간 인증 데이터 전달을 용이하게 하며, 보안 및 사용자 경험 측면에서 중요한 역할을 수행한다.