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 plugin는 Service Provider (SP) 역할을 하며 IdP에 대한 로그인을 시작하는 책임이 있습니다 (SP-주도 로그인).
SAML 플러그인의 주요 기능
- SSO Implementation: 인증되지 않은 사용자를 IdP의 로그인 페이지로 리디렉션하고, 인증 후 보호된 서비스에 대한 접근을 허용합니다.
- Session Management: 세션 상태 추적을 위해 쿠키를 사용하여 사용자 세션을 유지합니다.
- Form Handling: IdP authentication flow을 POST requests를 통해 지원하여 인증 매개변수의 보안을 보장합니다.
구성 세부정보
Field name | Description | Data input |
---|---|---|
로그인 콜백 URL | Login Callback URL은 사용자가 성공적으로 로그인한 후 인증 서버의 응답을 처리하는 데 사용되는 URL입니다. 시스템은 이 URL에서 애플리케이션으로 다시 리디렉션하여 프로세스를 계속합니다. | 사용자 정의 |
로그아웃 URL | 사용자가 로그아웃 요청을 하면 시스템은 이 URL로 리디렉션하여: - 사용자 세션을 종료합니다. - 인증 세션 토큰 또는 관련 세션 데이터를 삭제합니다. - 사용자가 로그인한 모든 서비스에서 로그아웃되도록 합니다. | 사용자 정의 |
IDP URL | IDP 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 Certificate | IDP 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 id | IdP는 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 host | Redis Host는 애플리케이션이 캐시에서 데이터를 저장하고 검색하기 위해 연결해야 하는 Redis 서버의 주소입니다. | 사용자 정의 |
Redis port | Redis Port는 Redis 서버가 클라이언트로부터의 연결을 수신하고 수신하기 위해 사용하는 네트워크 포트입니다. | 사용자 정의 |
프론트엔드 URL | 사용자가 브라우저에서 애플리케이션을 열기 위해 사용하는 주소입니다. | 사용자 정의 |
허용 헤더 | Allow Headers는 서버가 브라우저가 해당 서버에 요청을 보낼 때 사용할 수 있도록 허용하는 HTTP 헤더입니다. | 사용자 정의 |
실행 경로 | 인증이 적용되기 위해 URL에는 이 경로가 포함되어야 합니다. | 사용자 정의 |
참고:
- Client Signature이 ON으로 설정된 경우에만 텍스트 박스가 필요합니다.
- Encryption cert id 텍스트 박스는 Encrypt assertions이 ON으로 설정된 경우에만 필요합니다.