방법: WSFederationHttpBinding 만들기
WCF(Windows Communication Foundation)에서 WSFederationHttpBinding 클래스(구성의 wsFederationHttpBinding element)는 연합 서비스를 노출시키는 메커니즘을 제공합니다. 즉, 보안 토큰 서비스에서 발급된 보안 토큰을 사용하여 클라이언트가 인증해야 하는 서비스입니다. 이 항목에서는 코드와 구성 둘 다에서 WSFederationHttpBinding을 설정하는 방법을 보여 줍니다. 바인딩을 만들고 나면 해당 바인딩을 사용하도록 끝점을 설정할 수 있습니다.
기본 단계는 다음과 같이 간략하게 설명됩니다.
보안 모드를 선택합니다. WSFederationHttpBinding은 여러 홉을 통과하는 경우에도 메시지 수준에서 종단 간 보안을 제공하는 Message와 클라이언트 및 서비스가 HTTPS를 통해 직접 연결할 수 있는 경우 성능을 향상시키는 TransportWithMessageCredential을 지원합니다.
참고
WSFederationHttpBinding은 보안 모드로 None도 지원합니다. 이 모드는 보안되지 않으며 디버깅 목적을 위해서만 제공됩니다. 보안 모드를 None으로 설정하여 WSFederationHttpBinding으로 서비스 끝점을 배포하는 경우 ServiceModel Metadata Utility Tool (Svcutil.exe)에서 생성된 결과 클라이언트 바인딩은 보안 모드가 None인 WsHttpBinding입니다.
다른 시스템 제공 바인딩과 달리 WSFederationHttpBinding을 사용할 때는 클라이언트 자격 증명 형식을 선택할 필요가 없습니다. 이는 클라이언트 자격 증명 형식이 항상 발급된 토큰이기 때문입니다. WCF는 지정된 발급자로부터 토큰을 받아서 서비스에 제공하여 클라이언트를 인증합니다.
페더레이션 클라이언트에서는 IssuerAddress 속성을 보안 토큰 서비스의 URL로 설정합니다. IssuerBinding을 보안 토큰 서비스와 통신하는 데 사용할 바인딩으로 설정합니다.
선택적 요소입니다. IssuedTokenType 속성을 토큰 형식의 URI(Uniform Resource Identifier)로 설정합니다. 연합 서비스에서는 서비스에 필요한 토큰 형식을 지정합니다. 페더레이션 클라이언트에서는 클라이언트가 보안 토큰 서비스에서 요청하는 토큰 형식을 지정합니다.
토큰 형식을 지정하지 않으면 클라이언트는 토큰 URI 없이 WS-Trust RST(요청 보안 토큰)를 생성하며 기본적으로 SAML(Security Assertions Markup Language) 1.1 토큰을 사용한 클라이언트 인증이 서비스에 필요합니다.
SAML 1.1 토큰에 대한 URI는 "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"입니다.선택적 요소입니다. 연합 서비스에서는 IssuerMetadataAddress 속성을 보안 토큰 서비스의 메타데이터 URL로 설정합니다. 서비스의 클라이언트는 서비스가 메타데이터를 게시하도록 구성된 경우 메타데이터 끝점을 사용하여 적절한 바인딩/끝점 쌍을 선택할 수 있습니다. 메타데이터 게시에 대한 자세한 내용은 메타데이터 게시를 참조하십시오.
발급된 토큰에서 증명 키로 사용되는 키의 형식, 클라이언트와 서비스 간에 사용할 알고리즘 모음, 서비스 자격 증명을 협상할지 또는 명시적으로 지정할지 여부, 서비스에서 발급된 토큰에 포함되어 있다고 예상하는 특정 클레임, 클라이언트가 보안 토큰 서비스에 보내는 요청에 추가해야 하는 추가 XML 요소 등의 다른 속성을 설정할 수도 있습니다.
참고
NegotiateServiceCredential 속성은 SecurityMode가 Message로 설정된 경우에만 관련이 있습니다. SecurityMode를 TransportWithMessageCredential로 설정하면 NegotiateServiceCredential 속성은 무시됩니다.
코드에서 WSFederationHttpBinding을 구성하려면
WSFederationHttpBinding의 인스턴스를 만듭니다.
필요에 따라 Mode 속성을 Message 또는 TransportWithMessageCredential로 설정합니다. Basic256 이외의 알고리즘 모음이 필요한 경우 AlgorithmSuite 속성을 SecurityAlgorithmSuite에서 가져온 값으로 설정합니다.
NegotiateServiceCredential 속성을 적절하게 설정합니다.
필요에 따라 IssuedKeyType 속성을 SecurityKeyType SymmetricKey 또는 AsymmetricKey로 설정합니다.
IssuedTokenType 속성을 적절한 값으로 설정합니다. 값을 설정하지 않으면 WCF는 기본적으로 SAML 1.1 토큰을 나타내는 "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"로 설정됩니다.
로컬 발급자가 지정되지 않은 경우 클라이언트에서는 필수적 요소이고 서비스에서는 선택적 요소입니다. 보안 토큰 서비스의 주소 및 ID 정보를 포함하는 EndpointAddress를 만들고 EndpointAddress 인스턴스를 IssuerAddress 속성에 할당합니다.
로컬 발급자가 지정되지 않은 경우 클라이언트에서는 필수적 요소이고 서비스에서는 사용되지 않습니다. SecurityTokenService에 대한 Binding을 만들고 Binding 인스턴스를 IssuerBinding 속성에 할당합니다.
클라이언트에서는 사용되지 않고 서비스에서는 선택적 요소입니다. 보안 토큰 서비스의 메타데이터에 대한 EndpointAddress 인스턴스를 만들어 IssuerMetadataAddress 속성에 할당합니다.
클라이언트와 서비스 둘 다에서 선택적 요소입니다. 하나 이상의 ClaimTypeRequirement 인스턴스를 만들어 ClaimTypeRequirements 속성에서 반환된 컬렉션에 추가합니다.
클라이언트와 서비스 둘 다에서 선택적 요소입니다. 하나 이상의 XmlElement 인스턴스를 만들어 TokenRequestParameters 속성에서 반환된 컬렉션에 추가합니다.
구성에서 연합 끝점을 만들려면
응용 프로그램 구성 파일에서 wsFederationHttpBinding element를 <bindings> 요소의 자식으로 만듭니다.
binding 요소를 wsFederationHttpBinding element의 자식으로 만들고 name 특성을 적절한 값으로 설정합니다.
<security> 요소를 binding 요소의 자식으로 만듭니다.
필요에 따라 <security> 요소의 mode 특성을 Message 또는 TransportWithMessageCredential의 값으로 설정합니다.
<message> 요소를 <security> 요소의 자식으로 만듭니다.
선택적 요소입니다. <message> 요소의 algorithmSuite 특성을 적절한 값으로 설정합니다. 기본값은 Basic256입니다.
선택 사항. 비대칭 증명 키가 필요한 경우 <message> 요소의 issuedKeyType 특성을 AsymmetricKey로 설정합니다. 기본값은 SymmetricKey입니다.
선택 사항. <message> 요소의 issuedTokenType 특성을 설정합니다.
로컬 발급자가 지정되지 않은 경우 클라이언트에서는 필수적 요소이고 서비스에서는 선택적 요소입니다. <issuer> 요소를 <message> 요소의 자식으로 만듭니다.
address 특성을 <issuer> 요소로 설정하고 보안 토큰 서비스에서 토큰 요청을 수락하는 주소를 지정합니다.
선택 사항. <identity> 자식 요소를 추가하고 보안 토큰 서비스의 ID를 지정합니다.
자세한 내용은 서비스 ID 및 인증을 참조하십시오.
로컬 발급자가 지정되지 않은 경우 클라이언트에서는 필수적 요소이고 서비스에서는 사용되지 않습니다. 보안 토큰 서비스와 통신하는 데 사용할 수 있는 바인딩 섹션에서 <binding> 요소를 만듭니다. 바인딩을 만드는 방법에 대한 자세한 내용은 방법: 구성에서 서비스 바인딩 지정을 참조하십시오.
<issuer> 요소의 binding 및 bindingConfiguration 특성을 설정하여 이전 단계에서 만든 바인딩을 지정합니다.
클라이언트에서는 사용되지 않고 서비스에서는 선택적 요소입니다. <issuerMetadata> 요소를 <message> 요소의 자식으로 만듭니다. 그런 다음 <issuerMetadata> 요소의 address 특성에서 보안 토큰 서비스가 해당 메타데이터를 게시할 주소를 지정합니다. 선택적으로 <identity> 자식 요소를 추가하고 보안 토큰 서비스의 ID를 지정합니다.
클라이언트와 서비스 둘 다에서 선택적 요소입니다. <claimTypeRequirements> 요소를 <message> 요소의 자식으로 추가합니다. <add> of <claimTypeRequirements> 요소를 <claimTypeRequirements> 요소에 추가하고 claimType 특성으로 클레임 형식을 지정하여 서비스에서 사용할 필수 및 선택적 클레임을 지정합니다. isOptional 특성을 설정하여 지정된 클레임이 필수 또는 선택적 요소인지 지정합니다.
예제
다음 코드 샘플에서는 명령적으로 WSFederationHttpBinding을 설정하는 코드를 보여 줍니다.
참고 항목
작업
방법: WSFederationHttpBinding에서 보안 세션을 사용하지 않도록 설정