SAML 엔터프라이즈 ID 제공자

이 항목에서는 ‘ SAML ’ 엔터프라이즈 ID 공급자를 구성하는 데 필요한 ‘ SAML ’ 메타데이터 및 사용자 속성 매핑에 대한 정보를 제공합니다.

SAML 이는 사용자 신원을 확인하는 신원 제공자와 해당 신원 정보를 활용하는 서비스 제공자 간에 단일 로그인 정보를 교환하기 위한 XML 표준입니다. 클라우드 디렉터리 ID 공급자에 비해, ‘ SAML ’ 엔터프라이즈 ID 공급자는 구성이 더 복잡합니다.

서비스 제공자로서, SAML 엔터프라이즈 ID 제공자는 다음과 같은 기능을 수행합니다:
  1. 사용자를 인증하는 외부 ID 제공자IBM® Verify 인증을 위임합니다. 예: Microsoft ADFS 또는 Microsoft Azure AD.
  2. 반환된 사용자 신원 정보를 사용자 자격 증명 토큰에 Verify 채웁니다.
서비스 제공자ID 제공자 간 통신은 메타데이터 파일에 포함된 값을 사용합니다. SAML Enterprise ID 공급자와 외부 ID 공급자 간에 SAML 싱글 사인온(SSO)을 사용하려면, ID 공급자는 다음을 수행해야 합니다:
  1. SAML Enterprise ID 공급자에게 SAML 2.0 ID 공급자 메타데이터 파일을 제공하십시오.
  2. SAML 엔터프라이즈 ID 공급자로부터 SAML 2.0 서비스 공급자 메타데이터 파일을 가져옵니다.

SAML 메타데이터 요구사항

  • 서비스 제공자ID 제공자 메타데이터 파일 모두의 컨텐츠는 SAML 2.0 스펙과 일치해야 합니다.
  • SAML Enterprise ID 공급자가 디지털 서명을 검증할 수 있도록 하려면 ID 공급자 메타데이터 파일에 ID 공급자의 공개 키가 포함되어 있어야 합니다. SAML 메타데이터에는 요소가 <KeyDescriptor> 반드시 포함되어야 합니다. 서명 키용 <KeyDescriptor> 요소의 예제:
    <md:KeyDescriptor use="signing">
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <X509Data>
              <X509Certificate>idp.example.com SSO key</X509Certificate>
            </X509Data>
          </KeyInfo>
    </md:KeyDescriptor>
    
  • 서비스 제공자 메타데이터 파일에는 최소 하나의 <md:KeyDescriptor use="signing"> 요소가 포함되어 있어야 합니다. 예:
    <md:KeyDescriptor use="signing">
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <X509Data>
              <X509Certificate>(...signing certificate...)</X509Certificate>
            </X509Data>
          </KeyInfo>
    </md:KeyDescriptor>
    
  • SAML Enterprise ID 제공자가 내부 루트 또는 중간 CA 인증서를 사용하는 경우, 인증서 체인에 포함된 각 인증서에는 stanza가 <X509Certificate> 있어야 합니다. 예:
    <KeyDescriptor use="signing">    
         <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <X509Data>
              <X509Certificate>...root CA base64 encoded public certificate...</X509Certificate>
              <X509Certificate>...intermediate CA base64 encoded public certificate...</X509Certificate>
              <X509Certificate>...signer base64 encoded public certificate ...</X509Certificate>
            </X509Data> 
         </KeyInfo> 
    </KeyDescriptor>
    
    SAML 메타데이터의 및 <md:KeyDescriptor use="encryption"> 요소를 모두 <md:KeyDescriptor use="signing"> 업데이트하십시오.
    참고: 서비스 공급자 메타데이터 파일의 <md:KeyDescriptor use="encryption"> 요소에 포함된 인증서는 외부 신원 공급자인 SAML 2.0 에서 SAML2 어설션 Verify요소를 암호화하여 로 전송하는 데 사용할 수 있습니다.

SAML 주장Verify 자격 증명 토큰 매핑

SAML Enterprise ID 제공자는 SAML 어 설션에 포함된 사용자 신원 정보를 사용하여 다음을 채웁니다:
  • 인증된 Verify Connect 사용자를 나타내는, Verify 인증 정보 토큰.

    사용자 ID와 속성 정보를 저장합니다.

  • SaaS 애플리케이션으로 전송되는 아웃바운드 SAML 요청.
표 1. SAML 주장 및 자격 증명 토큰 매핑
SAML 어설션 요소의 값 다음과 같이 자격 증명 토큰에 Verify 추가됩니다
<saml:Subject><saml:NameID> preferred_username
<saml:Issuer> realmName, 해당 주장이 SAML 명시적으로 포함되지 않은 경우 realmName .
참고:http(s)URL 형식인 경우 <saml:Issuer> , URL 내의 가 <hostname> 추출되어 속성을 realmName 설정하는 데 사용됩니다.

<saml:AttributeStatement>SAML 어설션에는 기타 사용자 신원 정보가 포함될 수 있습니다. <saml:AttributeValue> 요소는 문자열 데이터 유형만 지원합니다.

<saml:Attribute Name> 속성이 클라우드 Verify 디렉터리의 다음 표준 속성 중 하나와 일치하는 경우, 해당 속성은 동일한 속성 이름으로 표준 속성으로서 자격 Verify 증명 토큰에 추가됩니다:
  • preferred_username
  • given_name
  • family_name
  • name 또는 displayName
  • email 또는 emailAddress
  • groups 또는 groupIds
  • userID
  • realmName
  • mobile_number

해당 <saml:Attribute Name> 속성이 클라우드 Verify 디렉토리의 표준 속성 중 어느 것과도 일치하지 않는 경우, 해당 속성은 확장 속성으로 자격 증명 토큰에 Verify 추가됩니다. 확장된 속성은 원래 속성 이름에 접두사 ext::가 붙습니다.

다음은 자격 Verify 증명 토큰으로 전달될 및 mobile_number 속성을 emailAddress 포함하는 속성 어설션을 <saml:AttributeStatement> 가진 SAML 응답의 예시입니다.
<?xml version="1.0"?>
<samlp:Response xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
      xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      ID="FIMRSP_549f7c46-014a-195f-b377-f24678dbf88a" 
      IssueInstant="2014-12-16T19:42:25Z" Version="2.0">
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion ID="Assertion-uuid549f74ad-014a-120d-a67b-f24678dbf88a" 
      IssueInstant="2014-12-16T19:42:23Z" Version="2.0">
    <saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">
         https://idp.example.com/SAML</saml:Issuer>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">testuser
          </saml:NameID>
      <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <saml:SubjectConfirmationData NotOnOrAfter="2014-12-16T19:43:23Z" 
             Recipient="https://sp.iam.ibmcloud.com/SAML"/>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Conditions NotBefore="2014-12-16T19:41:23Z" NotOnOrAfter="2014-12-16T19:43:23Z">
      <saml:AudienceRestriction>
        <saml:Audience>https://sp.iam.ibmcloud.com/SAML</saml:Audience>
      </saml:AudienceRestriction>
    </saml:Conditions>
    <saml:AuthnStatement AuthnInstant="2014-12-16T19:42:23Z" 
           SessionIndex="uuid549ad19a-014a-1451-8e4d-998e0731058a" 
           SessionNotOnOrAfter="2014-12-16T20:42:21Z">
      <saml:AuthnContext>
        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password
            </saml:AuthnContextClassRef>
      </saml:AuthnContext>
    </saml:AuthnStatement>
    <saml:AttributeStatement>
      <saml:Attribute Name="emailAddress" 
            NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue xsi:type="xs:string">testuser@idp.example.com</saml:AttributeValue>
      </saml:Attribute>
      <saml:Attribute Name="mobile_number" 
            NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue xsi:type="xs:string">01234556789</saml:AttributeValue>
      </saml:Attribute>    
    </saml:AttributeStatement>
  </saml:Assertion>
</samlp:Response>
다음 JSON 객체는 SAML 인증 응답에서 변환된 자격 Verify 증명 토큰의 속성 집합에 대한 비규범적 예시입니다. 이는 ‘ SAML ’ 어설션에 포함된 사용자의 신원 및 속성이 자격 증명 토큰 내에서 어떻게 매핑되는지를 보여줍니다.
{
"preferred_username":"testuser",
"realmName": "idp.example.com",
"email":"testuser@idp.example.com",
"ext:mobileNumber": "01234556789"
}