2012-09-05 2 views
1

다음 코드 (ComponentSpace Saml 2.0 lib가 사용됨)를 실행할 때 Fiddler는 SAMLRequest의 값이 다음과 같이 암호화 된 것임을 보여줍니다. <input type="hidden" name="SAMLRequest" value="PHNhbWxwOkF1dGhu...."> 이것은 예상되는 동작입니다. 이 코드는 SSO SAML 2.0 POST 프로필의 첫 번째 단계를 구현합니다. 모든 종류의 암호화를 수행하기 위해 코드에 인증서 키가 지정되어 있지 않으므로 ComponentSpace 라이브러리가 어떤 암호화 키를 선택할지 어떻게 결정합니까? 위키 백과는 말한다 모든Where from ComponentSpace Saml 2.0은 어설 션을 암호화하는 데 열쇠가됩니다

var authnRequest = new AuthnRequest 
     { 
      Destination = @"https://idpserver/...", 
      Issuer = new Issuer(@"https://sp/..."), 
      ForceAuthn = false, 
      NameIDPolicy = new NameIDPolicy(null, null, true), 
      ProtocolBinding = SAMLIdentifiers.BindingURIs.HTTPPost, 
      AssertionConsumerServiceURL = @"https://sp/..." 
     }; 

     var relayState = RelayStateCache.Add(new RelayState(@"https://sp/...", null)); 

     ServiceProvider.SendAuthnRequestByHTTPPost(
      new HttpResponseWrapper(_context.Response), 
      @"https://idpserver/...", 
      authnRequest.ToXml(), 
      relayState); 

"는 SAMLRequest 매개 변수의 값은 base64 인코딩이다"입니다. 키를 인코딩하는 데 사용 된 정보가 없습니다.

답변

1

죄송합니다. 질문에 대한 오해. 예제 코드가 생성되어 authn 요청을 보냈습니다. SAML 응답에 포함 된 SAML 어설 션에 대해 묻는 것처럼 들립니다.

ID 공급자는 서비스 공급자의 공개 키를 사용하여 SAML 어설 션을 암호화합니다. 서비스 프로 바이더는 그 비공개 키를 사용해 assertion를 복호화합니다.

예를 보려면 SAML 어설 션을 암호화/해독하는 방법을 설명하는 AssertionExample 프로젝트를 살펴보십시오.

제공된 링크의 2 단계는 SP가 HTTP/POST를 통해 AuthnRequest를 IdP로 보내는 SP를 설명합니다. AuthnRequest 전송에는 XML 암호화가 필요하지 않습니다. XML은 deflate 및 base-64를 사용하여 암호화되지만 암호화는 사용하지 않습니다. 이 인코딩은 ServiceProvider.SendAuthnRequestByHTTPPost를 호출 할 때 수행됩니다.

0

인증 요청에 서명하는 것은 선택 사항입니다.

이 ServiceProvider.SendAuthnRequestByHTTPPost를 호출하기 전에, 요청에 서명하려면, 당신은 같은 것을 할 필요가 다음

// Serialize to XML 
XmlElement authnRequestElement = authnRequest.ToXml(); 

// Sign the authn request 
SAMLMessageSignature.Generate(authnRequestElement, x509Certificate.PrivateKey, x509Certificate); 

// Send the authn request to the IdP 
ServiceProvider.SendAuthnRequestByHTTPPost(..., authnRequestElement, ...); 

당신은 항상 당신의 개인 키로 서명하고 수신자가 공개 키를 사용하여 서명을 확인합니다/증명서.

+0

응답 해 주셔서 감사합니다.하지만 메시지 서명이 아니라 문자 그대로 암호화에 대해 질문했습니다. ComponentSpace 문서는 서명과 관련된 포괄적 인 정보를 제공하므로이 문제와 관련하여 질문은 없지만 암호화는 거의 다루지 않습니다. 주요 질문은 내가 제공 한 코드에서와 같이 모든 주장을 암호화하는 데 어떤 키가 사용되는지입니다. – YMC

+0

여기를 보시고 2 단계에서 http://en.wikipedia.org/wiki/SAML_2.0#SP_POST_Request.3B_IdP_POST_Response를 찾으십시오. ComponentSpace는 를 어떤 종류의 키로 암호화합니다. 서비스 제공 업체 컴퓨터의 일부 비공개 키입니다. 그러나 IdP는이를 해독하기 위해 공개 키가 필요합니다. 그래서 어떤 공개 키를 팀에 보내야하는지 알고 싶습니다. IdP 지원 – YMC

관련 문제