IDP(IDentity Provider)에서 사용되는 여러 개념들을 정리해봅니다.
우리가 IDP를 사용할 때는 가장 먼저 인증과 인가에 대한 개념을 배우는데 이름이 비슷해서 너무 헷갈리는 것 중에 하나죠. 영어로도 헷갈리고 한국어로도 헷갈려서 인증은 n, 인가는 z로 외우고 있습니다. 실제로 외국에서는 Auth-N, Auth-Z라고 표현하기도 하는 것 같습니다.
인증 vs 인가
Authentication(Auth-N) : 시스템에서 사용자가 제공한 정보가 실제로 사용자의 것인지 거짓은 아닌지 확인하는 것이다. (로그인)
Authorization(Auth-Z) : 인증을 마친 사용자가 적법한 권한이 있는지 확인한다. (권한)
일단 두 개념을 아주 간단하게 표현하면 인증은 로그인 절차로 우리가 알고있는 사용자가 맞는지 검증합니다. 그럼 로그인이 되면 우리가 알고 있는 식별된 사용자는 맞는데 그 사용자가 이 서비스에 어떤 권한이 있는지 알아야 겠죠? 들어온 사람한테 관리자 권한을 줄 수는 없죠. 이 절차를 인가라고합니다. 허가 할 때의 '가(Z랑 나름 비슷?)'이기 때문에 그렇게 생각해도 좋을 것 같아요.
이제 이런 개념은 알았으니 인증을하는 도구, 인가를 하는 도구에 대해서 알아봐야할 것 같습니다.
이미 많이 개발되서 상용하된 서비스가 많습니다. 가장 대표적인게 아래 3개입니다.
그래서 아래 3개는 각각의 아티클을 준비했습니다.
표준 IDP(IDentity Provider)
SAML (Security Assertion Markup Language): 2001년 OASIS에서 개발한 엔터프라이즈 애플리케이션의 SSO 목적으로 XML형식으로 개발됨 - Authentication(인증) 및 Authorization(인가) 표준
OAuth : 2006년 트위터에서 API 허가를 목적으로 JSON 형식으로 개발됨 - Authorization(인가) 표준
OIDC (OpenID Connect) : 2014년 OpenID Foundation에서 소비자 애플리케이션의 SSO를 목적으로 JSON 형식으로 개발됨 - Authentication(인증) 표준
그리고 그 외에도 우리가 잘 아는 것들을 적어보면.
API keys : 요청 URL 또는 헤더에 포함하는 긴 문자열로 해당 키로 인증과 인가를 모두 할 수 있다. 흔히 RBAC(Role Based Access Control, 역할 기반 엑세스 제어)를 구현하기 용이하다.
JWT(Json Web Token) : 당사자간 안전하게 데이터 송수신하기 위한 공개 표준으로 사용자가 공개 / 개인 키 쌍을 사용해 권한을 부여받는다.