1

WIF/WCF アクティブ STS に対して直接認証するアプリケーションがあります。このアプリケーションはパッシブ STS でもあり、Web サイトの証明書利用者の WS-Federation エンドポイントとして機能します。

ユーザーが Web サイト RP にログインすると、認証 (ユーザー名とパスワード) のためにパッシブ STS にリダイレクトされ、2 段階のプロセスで、パッシブ STS (アクティブ RP として機能) が Issue RST を STS に送信します。署名された SAML トークンを受け取ります。2 番目のステップでは、パッシブ STS が 2 番目の Issue RST を STS に送信し、前のステップで受け取ったトークンで認証します。

問題は、2 番目のステップで、WCF クライアント<Signature>が SAML アサーションから要素を削除してから、SOAP ヘッダーで STS に送り返すことです。に渡されたトークンをテストシリアル化することにより、生成されたチャネルでChannelFactory<TChannel>.CreateChannelWithIssuedToken呼び出したときに、トークンにまだ署名が存在することを確認しました。IWSTrustContract.Issue

これは、STS に提供する必要があるアサーション XML です。

<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_0a5efbe5-446c-459c-8aaa-dda87748bca2" Issuer="https://sts.environment.com/" IssueInstant="2014-01-30T21:48:56.673Z" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
  <saml:Conditions NotBefore="2014-01-30T21:48:56.673Z" NotOnOrAfter="2014-01-30T22:48:56.673Z">
    <saml:AudienceRestrictionCondition>
      <saml:Audience>https://login.environment.com/</saml:Audience>
    </saml:AudienceRestrictionCondition>
  </saml:Conditions>
  <saml:AttributeStatement>
    <saml:Subject>
      <saml:SubjectConfirmation>
        <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:holder-of-key</saml:ConfirmationMethod>
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <trust:BinarySecret xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512"><!--Removed--></trust:BinarySecret>
        </KeyInfo>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Attribute AttributeName="upn" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims">
      <saml:AttributeValue><!--Removed--></saml:AttributeValue>
    </saml:Attribute>
  </saml:AttributeStatement>
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <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="#_0a5efbe5-446c-459c-8aaa-dda87748bca2">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <DigestValue><!--Removed--></DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue><!--Removed--></SignatureValue>
    <KeyInfo>
      <X509Data>
        <X509Certificate><!--Removed--></X509Certificate>
      </X509Data>
    </KeyInfo>
  </Signature>
</saml:Assertion>

これは、Service Trace Viewer ごとに、STS が受け取るものです。

<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_0a5efbe5-446c-459c-8aaa-dda87748bca2" Issuer="https://sts.environment.com/" IssueInstant="2014-01-30T21:50:27.842Z" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
  <saml:Conditions NotBefore="2014-01-30T21:50:27.841Z" NotOnOrAfter="2014-01-30T22:50:27.841Z">
    <saml:AudienceRestrictionCondition>
      <saml:Audience>https://login.environment.com/</saml:Audience>
    </saml:AudienceRestrictionCondition>
  </saml:Conditions>
  <saml:AttributeStatement>
    <saml:Subject>
      <saml:SubjectConfirmation>
        <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:holder-of-key</saml:ConfirmationMethod>
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <trust:BinarySecret xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512"><!--Removed--></trust:BinarySecret>
        </KeyInfo>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Attribute AttributeName="upn" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims">
      <saml:AttributeValue><!--Removed--></saml:AttributeValue>
    </saml:Attribute>
  </saml:AttributeStatement>
</saml:Assertion>

もちろん、STS はアサーションの署名が削除されているため検証できず、クライアントを認証して Web サイト RP のベアラー トークンを発行することもできません。

WCF フェデレーション クライアントがアサーションから署名を削除するのはなぜですか? また、それを行わないようにするにはどうすればよいですか?

4

0 に答える 0