方法: フェデレーション サービスで資格情報を設定する

Windows Communication Foundation (WCF) でのフェデレーション サービスの作成は、主に次の 3 つの手順で構成されます。

  1. WSFederationHttpBinding または同様のカスタム バインドの構成。 適切なバインディングを作成する方法の詳細については、「方法: WSFederationHttpBinding を作成する」を参照してください。

  2. サービスに提示される発行済みトークンの認証方法を制御する IssuedTokenServiceCredential の構成。

このトピックでは、2 番目の手順について詳しく説明します。 フェデレーション サービスのしくみの詳細については、「フェデレーション」を参照してください。

コードで IssuedTokenServiceCredential のプロパティを設定するには

  1. IssuedTokenAuthentication クラスの ServiceCredentials プロパティを使用して、IssuedTokenServiceCredential インスタンスへの参照を返します。 このプロパティは、Credentials クラスの ServiceHostBase プロパティからアクセスされます。

  2. CardSpace カードなどの自己発行されるトークンを認証する場合は、AllowUntrustedRsaIssuers プロパティを true に設定します。 既定では、 falseです。

  3. KnownCertificates プロパティによって返されるコレクションに X509Certificate2 クラスのインスタンスを設定します。 各インスタンスは、サービスが認証を行うトークンの発行者を表します。

    Note

    ScopedCertificates プロパティによって返されるクライアント側のコレクションとは異なり、既知の証明書コレクションはキー付きのコレクションではありません。 指定した証明書が発行するトークンは、発行済みトークンを含むメッセージを送信したクライアントのアドレスとは無関係に、サービスによって受け入れられます (その他の制約については以下で説明します)。

  4. CertificateValidationMode プロパティを X509CertificateValidationMode 列挙値のいずれかに設定します。 これは、コードでのみ設定することができます。 既定では、 ChainTrustです。

  5. CertificateValidationMode プロパティが Custom に設定されている場合、カスタム X509CertificateValidator クラスのインスタンスを CustomCertificateValidator プロパティに割り当てます。

  6. CertificateValidationModeChainTrust または PeerOrChainTrust に設定されている場合、RevocationMode プロパティを X509RevocationMode 列挙値にある適切な値に設定します。 失効モードは PeerTrust または Custom 検証モードでは使用されないことに注意してください。

  7. 必要に応じて、カスタム SamlSerializer クラスのインスタンスを SamlSerializer プロパティに割り当てます。 カスタム SAML (Security Assertions Markup Language) アサーションの解析などには、カスタム SAML シリアライザーが必要です。

構成で IssuedTokenServiceCredential のプロパティを設定するには

  1. <serviceCredentials> 要素の子要素として <issuedTokenAuthentication> 要素を作成します。

  2. CardSpace カードなどの自己発行されるトークンを認証する場合は、<issuedTokenAuthentication> 要素の allowUntrustedRsaIssuers 属性を、true に設定します。

  3. <knownCertificates> 要素の子要素として <issuedTokenAuthentication> 要素を作成します。

  4. <add> 要素の子要素として 0 個以上の <knownCertificates> 要素を作成し、storeLocationstoreNamex509FindType、および findValue 属性を使用して証明書の検索方法を指定します。

  5. 必要に応じて、<issuedTokenAuthentication> 要素の samlSerializer 属性をカスタム SamlSerializer クラスの型名に設定します。

次の例では、IssuedTokenServiceCredential のプロパティをコードで設定しています。

// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials(
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers,
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;

  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode =
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}
' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub

クライアントがフェデレーション サービスによって認証されるためには、発行済みトークンが次のことを満たす必要があります。

  • 発行済みトークンのデジタル署名が RSA セキュリティ キー識別子を使用している場合、AllowUntrustedRsaIssuers プロパティを true にする必要があります。

  • 発行済みトークンの署名に X.509 発行者シリアル番号、X.509 サブジェクト キー識別子、または X.509 拇印セキュリティ識別子が使用されている場合、発行済みトークンは KnownCertificates クラスの IssuedTokenServiceCredential プロパティによって返されたコレクションにある証明書で署名されている必要があります。

  • 発行済みトークンが X.509 証明書を使用して署名されている場合、証明書が CertificateValidationMode として証明書利用者に送信されたか、X509RawDataKeyIdentifierClause プロパティから取得されたかに関係なく、KnownCertificates プロパティの値で指定されるセマンティックスごとに証明書を検証する必要があります。 X.509 証明書の検証の詳細については、「証明書の使用」を参照してください。

たとえば、CertificateValidationModePeerTrust に設定すると、その署名の証明書が TrustedPeople 証明書ストアに格納されている任意の発行済みトークンが認証されます。 この場合、TrustedStoreLocation プロパティを CurrentUser または LocalMachine に設定します。 Custom を含めて、他のモードを選択できます。 Custom を選択した場合、X509CertificateValidator クラスのインスタンスを CustomCertificateValidator プロパティに割り当てる必要があります。 カスタム検証では、任意の基準を使用して証明書を検証できます。 詳細については、「方法 : カスタム証明書検証を使用するサービスを作成する」を参照してください。

関連項目