요즘 어디서나 소셜로그인 기능을 많이 보셨을거에요!
페이스북, 카카오톡, 구글, 애플 더 나아가 깃허브같은거요!
과거에는(라떼는) 사이트별로 모두 아이디 비밀번호가 따로 있었어요.
네이버 아이디, 다음 아이디, 네이트(?) 아이디..
그때 당시에는 그런 사이트(혹은 서비스)간의 유기적인 연결 관계가 크게 없었고, 있어봤자 외워야할 아이디가 그렇게 많지 않았어요.
최근에 들어서는 웹사이트가 셀 수 없이 많아졌고, 아이디/비밀번호를 관리하는것도 문제고, 가입할때마다 어차피 같은 정보 (이메일, 이름 등) 집어넣고 가입하는 과정 자체도 싫증이 나게 된거에요. 어차피 로그인 과정은 "가입자가 나임"을 증명하기만 하면 되는거잖아요.
로그인하려는 사용자가 "나"임을 중앙에서 관리해주는 개념, IdP (IDentity Provider) 가 등장하게 되었어요
말그대로 "사용자" = "나" 임을 증명해주는 방법을 제공하는 곳이에요. 위의 소셜 로그인 제공자 (구글, 페이스북, 카카오 등) 모두 위에 해당해요.
한편, "사용자" = "나" 임을 증명하는 방법엔 뭐가 있을까요?
각 IdP별로 제공하는 방법(혹은 팩터)들이 다 달라요.
대부분의 경우는 첫번째 방법인 "사용자의 지식", 대표적으로 아이디/비밀번호로 인증하는게 일반적이고,
요즘 들어 스마트폰 기반 OTP(Google OTP, Authy 등) 등의 "소유물" 방식도 사용하기도 해요.
마지막 방법인 "사용자별 본질적 특성"은 아이폰의 FaceID, 갤럭시의 홍채인식등이 해당해요. 마지막 방법은 참고로 "온라인"에 저장되는 내 식별 정보는 아니고 각자의 휴대폰에 저장되는 식별 정보이지만, 결국 "사용자" = "나" 임을 증명해주는 방법이기에!!!! 애플의 iOS, 갤럭시의 무언가? 자체가 IdP가 될 수 있어요.
위에서 "사용자" = "나" 임을 증명해주는 방법을 "팩터" 라고 해요. IdP에 따라 하나의 팩터만이 아닌 여러 팩터로 로그인이 가능하도록 설계해둔곳이 있어요 (구글이 대표적!). 하나의 팩터는 보안에 취약하니까, 여러 팩터를 가지고 로그인을 시켜준다는거죠.
ex) 아이디/비밀번호로 로그인 => 스마트폰 OTP로 로그인 => 로그인 성공!
또 흔한 오인으로 MFA == OTP 로 설명하는곳이 있어요. OTP는 Multi Factor중 하나의 팩터일 뿐이지 둘이 같다고 보긴 힘들어요.
위에서 "사용자" = "나" 임을 증명해주는 방법을 제공하는곳이 IdP라고 했죠?
이제 이러한 하나의 중앙 IdP를 통해 여러 서비스를 로그인할 수 있게 하는것이 SSO 라고 해요.
본질적으로 각 서비스들은 위의 중앙 IdP가 인정해준 "사용자" = "나" 임을 믿고 로그인을 시켜주겠다는거죠.
많은 글과 개념 설명에서 SSO와 IdP를 같은 개념으로 두고 네이버, 카카오등이 SSO라고 설명하기도 하는데,
실제로는 SSO는 IdP를 이용해 내 서비스를 로그인하는 "과정" 인거고, 실제로 내 정보를 들고 있는 네이버, 카카오등은 IdP라고 보는게 맞아요!