2016-01-20 6 views
0

Я пытаюсь реализовать SSO. В метаданных моего СП, я поставил подпись и алгоритм шифрования SHA256Ожидаемый алгоритм подписи не соответствует

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:SignedInfo> 
      <ds:CanonicalizationMethod Algorithm="" /> 
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> 
      <ds:Reference URI=""> 
       <ds:Transforms> 
        <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
       </ds:Transforms> 
       <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> 
       <ds:DigestValue /> 
      </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue /> 
    </ds:Signature> 

и в моей просьбе аутентификации я также отправить запрос как:

Signature signature = (Signature) Configuration.getBuilderFactory() 
     .getBuilder(Signature.DEFAULT_ELEMENT_NAME) 
     .buildObject(Signature.DEFAULT_ELEMENT_NAME); 
    signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256); 
    authnRequest.setSignature(signature); 
    ((SAMLObjectContentReference)signature.getContentReferences().get(0)).setDigestAlgorithm(EncryptionConstants.ALGO_ID_DIGEST_SHA256); 

И на моей IDP стороны под Advanced вкладки проверяющей стороны, я перепроверить SHA-256 устанавливается в качестве алгоритма хэширования, но теперь, когда я отправить запрос аутентификации, я получаю сообщение об ошибке, как:

`SAML request is not signed with expected signature algorithm. SAML request is signed with signature algorithm` http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 . Expected signature algorithm is http://www.w3.org/2000/09/xmldsig#rsa-sha1 

Пожалуйста, помогите мне решить эту проблему, если я пропускаю из S где-то.

ответ

0

Это сработало для меня!

При отправке запроса идентификации IDP мне нужно установить эти две строки.

BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration(); 
config.registerSignatureAlgorithmURI("RSA", SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256); 

Это задает алгоритм глобально и не будет работать, если у вас есть несколько клиентов с различными алгоритмами подписи