keycloak – gitlab 통합 1

gitlab과 keycloak을 연동하여 인증 시스템을 구축할 예정입니다.

이전 관련 용어 설명

keycloak – 오픈 소스 IAM 솔루션

okta – 상용 IAM 솔루션

IAM(Identity and Access Management) – 사용자 ID와 비밀번호를 통해 계정을 생성 및 관리하고 권한(인증, 권한 부여, 감사 등)을 부여하여 접근 제어

즉, IAM은 어떤 솔루션이나 프로토콜을 의미하는 것이 아니라 보안 동작 및 규칙을 의미합니다.

IAM용 솔루션에는 keycloak 및 Okta가 포함됩니다.

더 자세히 살펴보면 IAM 솔루션의 구성 요소, 프로토콜 및 보안 정책을 볼 수 있습니다.

  1. SAML – 인증 정보를 중앙에서 관리하여 단일 디지털 서명(ID, PW)으로 설정된 모든 리소스(SAML 제공)에 액세스합니다.
    논리는 다음과 같습니다.
    요청(사용자 로그인 시도) > 인증(SAML 및 IDP 연결) > 로그인(ID, Password 입력창 표시) > 토큰 생성(사용자 정보가 올바르면 SAML 토큰을 전송하여 서버에 로그인)


2. OAuth – 하나의 로그인(성공적인 인증)으로 얻은 토큰을 다른 서비스에 로그인(인증)할 때 토큰을 전달(ID 또는 PW를 전달하지 않음)하는 데 사용합니다. 유일한 조건은 사전에 IdP의 사용자 승인을 받아 자원 서버에 토큰을 발행해야 한다는 것입니다.

논리는 다음과 같습니다.

요청(사용자가 로그인 시도) > 선택(로그인 방법으로 타사 인증 선택) > 로그인(인증 서버에서 액세스 토큰을 생성하여 리소스 서버로 전송) > 연결(리소스 서버에서 토큰을 확인하고 액세스 허용)


SAML과 OAuth의 유사점과 차이점은 무엇인가요?

첫째, 유사점은 SAML과 OAuth를 사용(단일 로그인)하여 여러 서비스(SSO)에 대한 액세스를 허용한다는 것입니다.

예를 들어 Google(IDP) 계정으로 GitLab에 로그인하고 Facebook에 로그인하고 Plumber에 로그인합니다. 이는 SAML 또는 OAuth로 SSO 기능을 구현한 것으로 볼 수 있습니다.

차이점은 SAML=인증 / OAuth = 승인입니다. SAML의 경우 Google(IDP) 계정의 ID/비밀번호로 인증 후 다른 서비스에 로그인합니다.

OAuth는 Google에서 받은 토큰을 로그인하려는 다른 서비스, 즉 권한을 가지고 다른 서비스에 로그인하는 데 등록합니다.

로그인에 중점을 둔다면 둘 중 하나만 사용하면 됩니다.

보안을 더욱 강화하기 위해 SAML(권한 있는 사람만)으로 로그인하고, 서비스 로그인 후 OAuth(권한 있는 사람만)로 서브 서비스에 접근하면 보안을 더욱 강화할 수 있습니다.

3. OIDC – 인증을 위해 OAuth에서 인증 부분을 확장하여 구현한 프로토콜


openid 범위가 OAuth에 포함된 경우 OIDC입니다. oauth 범위에 openid가 있으면 oauth의 원래 목적인 액세스 토큰(권한 정보) 외에 인증 정보인 ID 토큰(JWT)이 반환됩니다.
##Authentication과 Authorization의 차이점: Authentication – Identity Verification / Authorization – Authorization

즉, OIDC는 Authorization이 아닌 인증을 위해 OAuth로 인증을 확장한 개념입니다.

위의 내용을 모두 이해했다면 각각 OAuth와 OIDC를 언제 사용해야 하는지 이해해야 합니다.

그렇다면 인증을 목적으로 하는 SAML과 OIDC의 특징과 장단점은 무엇이며 언제 사용되는 것일까?

SAML – XML ​​기반, OIDC보다 상대적으로 느리고, 메시지 크기가 크며, 20년 전부터 널리 사용되어 온 표준이다. 따라서 기존 시스템과의 호환성이 높습니다. 기존 엔터프라이즈 환경에 더 적합

OIDC – JSON 기반, 빠른 처리 속도 및 작은 크기. 최근(5~7년 전) 각광을 받고 있다. 많은 환경에서 사용됩니다.

장단점을 보면 OIDC가 더 좋아 보이지만 기존 기업 환경에서는 이미 SAML이 널리 사용되었기 때문에 SAML에 맞게 보안 규정과 가이드라인을 표준화했다. 따라서 보안 규정을 엄격하게 준수해야 하는 경우 OIDC보다 SAML을 채택하는 것이 적절하며 그렇지 않은 경우 OIDC가 더 유리하다고 판단됩니다.

따라서 SAML은 여전히 ​​널리 사용되지만 OIDC도 증가하고 있습니다.

SSO – 싱글 사인온. 인증/인증 하나로 해결

IdP – ID 공급자. 즉, 인증/권한 정보를 제공하는 곳입니다. (구글, 카카오, 페이스북 등)

JWT – Json Web Token – 사용자 인증 정보를 json 구조로 구성합니다. OIDC는 JWT와 인증을 교환합니다.