소셜로그인
사용자들은 회원가입을 통해 다양한 웹서비스를 이용한다.
서비스들이 많아지면서 매번 회원가입을 하기 번거로웠던 경험이 있을 것이다.
소셜로그인은 이런 문제를 해결할 방법 중 하나다.
대부분의 소셜로그인 OAuth 2.0 인증방식을 사용한다.
용어 정리
- Resource owner: 자원 소유자(로그인을 시도하는 사용자)
- Client: 서비스 제공자(사용자가 이용하는 서비스를 제공)
- Authorization server: 인증 서버(인증 처리 및 토큰 발행)
- Resource server: 자원 서버(실제 사용자 정보를 저장)
이 때 인증 서버와 자원 서버는 소셜로그인을 지원하는 기업에 존재한다.
과정
- 클라이언트가 서비스 출시 후 인증 기업에 사용을 신청
- 원하는 사용자 정보와 로그인 성공 시 접속할 주소를 설정
- 인증 기관에서 해당 정보를 검토한 뒤 적합한 경우 승인
- 이후 사용자가 소셜로그인을 요청하면 클라인트는 인증 서버로 안내
- 사용자가 안내받은 인증 서버에서 로그인 시도
- 인증 서버는 사용자가 처음 로그인하면 클라이언트가 요구하는 정보를 알려주고 동의를 받음
- 사용자가 정보 제공에 동의하고 로그인에 성공하면 등록된 클라이언트에게 토큰을 발행
- 클라이언트는 전달받은 토큰을 사용하여 자원 서버에서 사용자의 정보 요청
- 이 때 토큰 정보 중 access token에 해당하는 정보 필요
- 자원 서버는 전달받은 토큰이 유효한지 검사한 뒤 요청한 정보를 클라이언트에게 전달
- OAuth 인증절차가 끝나고 클라이언트는 사용자 정보를 획득
사용자는 최초 한 번의 동의와 로그인만 진행하면 된다.
2차 로그인 및 자동 로그인 기능으로 더 편리한 서비스 이용 경험을 제공할 수 있다.
토큰
서버의 응답 중 중괄호 안에 있는 정보가 토큰에 해당한다.
access_token, token_type, expires_in, refresh_token 등이 포함되며,
그 외에 필요에 따라 여러 종류의 값을 추가할 수 있다.
- access_token: 자원 서버에서 사용자 정보를 불러오기 위한 랜덤한 문자열.
- expires_in: 생성된 시점부터 지정된 시간(초)만큼 사용 가능하다.
- refresh_token: 시간이 만료되었다면 이 토큰을 사용해 access_token을 재발급할 수 있다.
- token_type: 토큰의 유형. OAuth 방식의 경우 일반적으로 Bearer 유형으로 표기한다.
카카오 액세스 토큰
카카오 API를 통해 발급된 액세스 토큰 예시이다.
{
"token_type": "Bearer",
"access_token": "1f3ffb6bfa702493b6aaebedc107e...",
"expires_in": 21599,
"refresh_token": "a3f5f7f108c3da45c4de...",
"refresh_token_expires_in": 5183999,
"scope": "profile"
}
구글 액세스 토큰
구글 OAuth 2.0 API로 발급된 액세스 토큰 예시이다.
{
"access_token": "ya29.a0AfH6SMA...",
"expires_in": 3600,
"scope": "https://www.googleapis.com/auth/userinfo.profile",
"token_type": "Bearer",
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6..."
}
네이버 액세스 토큰
{
"access_token": "AAAA2vK1yE56rs3NY3...",
"refresh_token": "AAAA2vK1yE56rs3NY3...",
"token_type": "bearer",
"expires_in": "3600"
}
실제 사용 예
액세스 토큰을 헤더에 포함하여 요청
GET /api/v1/userinfo HTTP/1.1
Host: api.example.com
Authorization: Bearer ya29.a0AfH6SMA...
리프레시 토큰으로 새로운 액세스 토큰 요청
POST /oauth/token HTTP/1.1
Host: api.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=a3f5f7f108c3...
소셜로그인의 장단점
장점 - 사용자
- 추가 회원 가입을 하지 않아도 된다.
- 비밀번호를 공개하지 않는다.
- 원하는 정보만 공개할 수 있다.
- 언제라도 로그인을 차단할 수 있다.
- 통합 로그인 관리가 가능하다.
단점 - 사용자
- SNS 계정이 털린다면 연동된 모든 서비스에서 피해가 발생할 수 있다.
- 연동한 SNS 종류를 알고 있어야 한다. 사용하는 SNS 종류가 많다면 중복 가입의 우려가 있다.
장점 - 클라이언트
- 사용자 유입이 증가한다.
- SNS에서 제공하는 유입 분석 등의 추가 기능을 사용할 수 있다.
단점 - 클라이언트
- SNS 종류가 다양하여 구현의 어려움이 있다.
- SNS마다 제공받을 수 있는 정보가 달라 정보 통일이 어렵고 추가 정보를 요구해야 할 수도 있다.
- 다양한 사유로 기능 사용을 거절당할 수 있다.
장점 - 인증 기업(SNS)
- 계정의 활용 가치를 높여 시장 점유율을 증가시킬 수 있다.
- 로그인 정보 분석을 통한 가치 창출이 가능하다.
단점 - 인증 기업(SNS)
- 정보 유출 시 큰 피해가 발생한다.
- 대량 트래픽 처리가 가능해야 하는데, 잦은 서버 다운 등 구현 프로세스의 결함이 발견된다면 브랜드에 대한 신뢰도가 떨어질 수 있다.
Reference
SNS 로그인의 이해 (feat. OAuth 2.0)
오잉 소셜로그인 찾고있었는데 님꺼였네 ㅋㅋㅋㅋㅋ