Azure B2 C с пользовательской политикой SAML2 и Sha256 в качестве алгоритма подписи - PullRequest
0 голосов
/ 31 марта 2020

Я использую пакет Sustainsys Sustainsys.Saml2.AspNetCore2 для создания веб-приложения поставщика услуг в ASP. NET Core 3.1, который использует Azure B2 C в качестве провайдера идентификации, используя SAML2. У меня есть следующая проблема:

  1. Если я использую Sha1 в качестве алгоритма подписи, используя опцию MinIncomingSigningAlgorithm, то исключение выдается CryptoConfig.CreateFromName, потому что этот метод не знать алгоритм Sha1.

  2. Если я использую Sha256 в качестве алгоритма подписи, тогда Azure B2 C подписывает ответ Sha1, даже если я указал <Item Key="XmlSignatureAlgorithm">Sha256</Item> в RelyingParty моей пользовательской политики. Следует отметить, что это, по-видимому, происходит только тогда, когда поставщик услуг запускает единый поток выхода из системы. Поток входа в систему завершается без проблем, и там алгоритм подписи Sha256. Вот мой раздел RelyingParty:

 <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2"/>
       <Metadata>
        <Item Key="XmlSignatureAlgorithm">Sha256</Item>
      </Metadata>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true"/>
    </TechnicalProfile>
  </RelyingParty>

Кроме того, метаданные Azure B2 C используют Sha256 в качестве метода подписи и дайджеста. Вот соответствующий раздел:

<SignedInfo>
    <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
    <Reference URI="...">
        <Transforms>
        <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
        <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
        <InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="saml samlp xenc xs"/>
        </Transform>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
    </Reference>
</SignedInfo>

Любая помощь высоко ценится. Спасибо.

1 Ответ

1 голос
/ 31 марта 2020

Оказывается, мне нужно было также добавить <Item Key="XmlSignatureAlgorithm">Sha256</Item> к техническому профилю (в дополнение к тому, что он является частью RelyingParty, как показано выше). Это решает проблему, с которой я столкнулся при однократном выходе.

<TechnicalProfile Id="Saml2AssertionIssuer">
  <Protocol Name="None"/>
  <OutputTokenFormat>SAML2</OutputTokenFormat>
  <Metadata>    
    <Item Key="XmlSignatureAlgorithm">Sha256</Item>
  </Metadata>
</TechnicalProfile>
...