본문으로 건너뛰기

SAML

개요

SAML (Security Assertion Markup Language)은 서로 다른 당사자 간의 인증 및 권한 부여를 용이하게 하는 개방형 표준입니다. 이는 Single Sign-On (SSO) 시스템에서 일반적으로 사용되며, 사용자가 한 번 로그인하면 자격 증명을 다시 입력하지 않고도 여러 서비스에 접근할 수 있게 합니다.

Kong API Gateway의 SAML 플러그인

SAML 사양은 세 가지 주요 역할을 정의합니다:

  • Principal – 로그인하는 사용자.
  • Identity Provider (IdP) – 사용자를 인증하고 신원 주장을 발행하는 엔터티.
  • Service Provider (SP) – 인증 주장을 수신하는 애플리케이션 또는 시스템.

Kong API Gateway에서 SAML pluginService Provider (SP) 역할을 하며 IdP에 대한 로그인을 시작하는 책임이 있습니다 (SP-주도 로그인).

SAML 플러그인의 주요 기능

  • SSO Implementation: 인증되지 않은 사용자를 IdP의 로그인 페이지로 리디렉션하고, 인증 후 보호된 서비스에 대한 접근을 허용합니다.
  • Session Management: 세션 상태 추적을 위해 쿠키를 사용하여 사용자 세션을 유지합니다.
  • Form Handling: IdP authentication flowPOST requests를 통해 지원하여 인증 매개변수의 보안을 보장합니다.

구성 세부정보

Field nameDescriptionData input
로그인 콜백 URLLogin Callback URL은 사용자가 성공적으로 로그인한 후 인증 서버의 응답을 처리하는 데 사용되는 URL입니다. 시스템은 이 URL에서 애플리케이션으로 다시 리디렉션하여 프로세스를 계속합니다.사용자 정의
로그아웃 URL사용자가 로그아웃 요청을 하면 시스템은 이 URL로 리디렉션하여:
- 사용자 세션을 종료합니다.
- 인증 세션 토큰 또는 관련 세션 데이터를 삭제합니다.
- 사용자가 로그인한 모든 서비스에서 로그아웃되도록 합니다.
사용자 정의
IDP URLIDP URL (아이덴티티 공급자 URL)은 인증 시스템에서 아이덴티티 공급자의 URL입니다. IDP URL는 일반적으로 다음과 같이 구성됩니다:
- 사용자가 로그인하는 데 사용할 인증 서버의 주소를 식별합니다.
- 인증 요청을 처리하고 사용자를 올바른 로그인 페이지로 리디렉션합니다.
1단계: 키클락을 엽니다.
2단계: Realm을 선택합니다.
3단계: 왼쪽 메뉴에서 “Realm 설정”을 클릭합니다.
4단계: “Endpoints” 필드에서 링크 https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor를 클릭하여 문서 트리로 리디렉션됩니다.
5단계: md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect의 “Location” 값을 가져옵니다.
(이 표 아래의 NOTE를 참조하십시오.)
발급자Isser는:
- 아이덴티티 공급자를 위한 고유 식별자입니다.
- 사용자의 신원을 확인하는 권한을 지정하기 위해 인증 토큰 또는 주장에 포함됩니다.
Realm의 클라이언트 ID.
클라이언트 서명Client Signature 클라이언트(고객 또는 애플리케이션)에 의해 생성된 디지털 서명입니다. 클라이언트 서명은 종종 다음과 같은 용도로 사용됩니다:

- 요청이 유효하고 신뢰할 수 있는 출처에서 왔는지 확인합니다.
- 전송 중 데이터가 변경되거나 변조되지 않도록 보호합니다.
- Identity Provider (IdP) 또는 다른 서버와 상호작용할 때 클라이언트의 진위를 보장합니다.

이 서명은 일반적으로 클라이언트의 개인 키를 사용하여 생성되며, 유효성을 보장하기 위해 서버에서 해당 공개 키로 검증됩니다.
1단계: 이 링크에서 클라이언트 서명을 얻습니다: https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4
2단계: 콘솔에서 인증서를 내보냅니다.
3단계: 키클락을 열고 Realm을 선택합니다.
4단계: 왼쪽 메뉴에서 “클라이언트”를 클릭합니다.
5단계: “키” 탭을 선택합니다.
6단계: “클라이언트 서명 필요”를 ON으로 전환하여 “클라이언트 서명 필요?” 팝업을 엽니다.
7단계: 2단계에서 내보낸 파일을 가져옵니다.
IDP CertificateIDP Certificate (Identity Provider Certificate)는 IdP(Identity Provider)에서 발급한 디지털 인증서로, IdP와 애플리케이션 또는 서비스 간의 인증 과정에서 보안 및 인증을 위해 사용됩니다.
The IDP Certificate는 수신자가 IdP로부터의 메시지의 진위를 확인할 수 있도록 하는 공개 키를 포함합니다.
Step 1: keycloak을 엽니다.
Step 2: Realm을 선택합니다.
Step 3: 왼쪽 메뉴에서 “Realm 설정”을 클릭합니다.
Step 4: “Endpoints” 필드에서 링크 https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor를 클릭하여 문서 트리로 리디렉션됩니다.
Step 5: ds:X509Certificate 태그의 데이터를 복사합니다.
Step 6: 5단계에서 얻은 데이터를 IDP Certificate 필드에 붙여넣습니다.
Encryption cert idIdP는 Encryption Cert ID를 사용하여 SP에 메시지를 보낼 때 올바른 암호화 인증서를 식별하여 전송 중 민감한 정보의 보안을 보장합니다.Step 1: 링크에서 Client Signature를 얻습니다: https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4
Step 2: 콘솔에서 인증서를 내보냅니다.
Step 3: keycloak을 열고 Realm을 선택합니다.
Step 4: 왼쪽 메뉴에서 “Clients”를 클릭합니다.
Step 5: “Keys” 탭을 선택합니다.
Step 6: “Encrypt assertions” = ON으로 전환하여 “Enable Client signature required?” 팝업을 엽니다.
Step 7: 2단계에서 내보낸 파일을 가져옵니다.
Redis hostRedis Host는 애플리케이션이 캐시에서 데이터를 저장하고 검색하기 위해 연결해야 하는 Redis 서버의 주소입니다.사용자 정의
Redis portRedis Port는 Redis 서버가 클라이언트로부터의 연결을 수신하고 수신하기 위해 사용하는 네트워크 포트입니다.사용자 정의
프론트엔드 URL사용자가 브라우저에서 애플리케이션을 열기 위해 사용하는 주소입니다.사용자 정의
허용 헤더Allow Headers는 서버가 브라우저가 해당 서버에 요청을 보낼 때 사용할 수 있도록 허용하는 HTTP 헤더입니다.사용자 정의
실행 경로인증이 적용되기 위해 URL에는 이 경로가 포함되어야 합니다.사용자 정의

참고:

  • Client Signature이 ON으로 설정된 경우에만 텍스트 박스가 필요합니다.
  • Encryption cert id 텍스트 박스는 Encrypt assertions이 ON으로 설정된 경우에만 필요합니다.