본문 바로가기
👨‍💻 프로그래밍/보안, Spring Security

다양한 로그인 방법을 알아보자 (OAuth, Open ID, OIDC, SSO, SFA, 2FA, MFA, OTP, PassKey)

by 개발자 진개미 2024. 2. 8.
반응형

🐜 큰 그림

우선, 로그인이란 나만 아는 정보를 제공해서 모두가 접근할 수 없는 특정 정보를 접근하는 것을 말합니다. 당연히 보안이 좋기 위해서는 나만 알 수 있는 정보들을 최대한 많이 제공하는게 좋겠죠. 하지만 로그인 할 때 마다 아이디/비밀번호를 입력하고, 지문이나 얼굴 인증을 하고, OTP 코드를 입력한다면 너무 불편해서 거의 쓰지 않겠죠? 그래서 보안과 편의성 사이의 저울질이 중요합니다.


🐜 분류하기

SFA, 2FA, MFA = 1번만 인증을 하냐, 여러번 인증을 하냐? 

로그인 할 때 아이디/비밀번호든, 생체인증 (얼굴, 지문 등)이든, 1개의 인증정보만 제공하면 SFA (Single Factor Authentication)입니다. 여기에 더해 추가로 흔하게는 OTP (One-Time Password)라 불리는 시간 제한이 있는 1회용 코드를 입력하는 2가지 과정이 있으면 2FA (2 Factor Authentication)이라 부릅니다. 보통은 2FA로도 충분하지만 여기에 추가적으로 여러 인증 정보를 요구하면 이제 MFA (Multi Factor Authentication)이라 부릅니다,

 

SSO = 사이트 별로 다른 로그인 정보를 쓰느냐, 공유해서 쓰느냐?

네이버에서는 이 아이디에 저 비밀번호, 구글에서는 또 다른 아이디에 비밀번호... 이런 불편함을 해소하기 위해 SSO (Single Sign On)이 나왔습니다. SSO는 1개의 아이디/비밀번호 (혹은 다른 보안 정보)로 여러 웹 사이트의 로그인을 할 수 있게 해 줍니다. SSO는 일종의 기능이기 때문에, SSO를 지원하기 위한 여러 Protocol이 있습니다. Open ID, Open ID Connect 등이 SSO를 지원합니다.

 

OAuth = 로그인 정보를 사이트에 직접 제공하느냐, 간접적으로 제공하느냐?

아이디/비밀번호는 당연히 사이트에 직접 제공해야 할 것 같지만 꼭 그렇지도 않습니다. 네이버, 카카오, 구글 같은 믿을 수 있는 제 3자가 있다면 유저 입장에서도 믿을 수 없는 사이트에 아이디/비밀번호를 제공하느니 네이버, 카카오, 구글의 아이디/비밀번호를 제공해 로그인 할 수 있으니 좋고, 사이트 입장에서도 아이디/비밀번호를 직접 관리하고 기능을 구현하기 보다 네이버, 카카오, 구글 등의 제 3자의 믿을 수 있는 시스템을 이용할 수 있어서 좋습니다. 이런 제 3자에게 로그인을 맡길 수 있는 표준을 OAuth (Open Authorization) 라고 합니다.


🐜 OAuth1.0 vs OAuth 2.0

  • OAuth 1.0이 먼저 나왔고, OAuth 2.0은 1.0의 문제를 보완해 새롭게 나온 Protocol입니다.
  • OAuth 1.0은 보안적으로 더 강력한 대신 복잡하고, OAuth 2.0은 보안적으로는 덜 뛰어나지만 훨씬 간단합니다.
  • OAuth 1.0에서는 모든 요청을 HTTPS에 더해서 암호화해야 하지만 OAuth 2.0은 암호화의 역할을 다른 계층으로 넘겼습니다.
  • OAuth 2.0에서는 Bearer Token만 있으면 로그인 된 걸로 간주하기 때문에 훨씬 간단합니다.

🐜 Open ID vs OIDC

  • Open ID가 먼저 나왔습니다.
  • Open ID는 인증은 표준화했지만, 인증 후에 유저 정보를 가져오는건 표준화 하지 않았기 때문에 한계가 많았습니다.
  • OIDC (Open ID Connect)OAuth 2.0 위에서 동작하고, Open ID와 OAuth 2.0의 각종 단점을 보완했습니다.

🐜 Passkey?

  • FIDO 동맹에서 만든 아이디/비밀번호 방식의 로그인을 대체하기 위한 표준입니다.
  • 생체인증 (얼굴, 지문 등)을 인증해 로그인 할 수 있으며, Cloud를 통해 싱크해 보안을 유지합니다.

🐜 만약에 웹 사이트를 만든다면 어떤 로그인 방식을 지원해야 할까?

만약 제가 지금 웹 사이트를 만들어야 한다면 아래와 같은 3가지 방식을 쓸 거 같습니다.

  1. 직접 로그인 방식을 없앤다
  2. OAuth 2.0으로 카카오, 네이버, 구글 등 자주 쓰는 소셜 로그인을 구현한다
  3. OIDC로 소셜 로그인을 최대한 쉽게 할 수 있게 한다

반응형

댓글