方法 : フェデレーション サービスで資格情報を設定する
Windows Communication Foundation (WCF) でフェデレーション サービスを作成するには、大きく分けると次のような手順があります。
WSFederationHttpBinding または同様のカスタム バインディングを構成します。適切なバインディングの作成詳細情報、「方法 : WSFederationHttpBinding を作成する」を参照してください。
サービスに提示される発行済みトークンの認証方法を制御する IssuedTokenServiceCredential の構成。
このトピックでは、2 番目の手順の詳細について説明します。フェデレーション サービスのしくみ詳細情報、「フェデレーション」を参照してください。
コードで IssuedTokenServiceCredential のプロパティを設定するには
ServiceCredentials クラスの IssuedTokenAuthentication プロパティを使用して、IssuedTokenServiceCredential インスタンスへの参照を返します。このプロパティは、ServiceHostBase クラスの Credentials プロパティからアクセスされます。
CardSpace カードのように自己発行されるトークンを認証する場合は、AllowUntrustedRsaIssuers プロパティを true に設定します。既定値は false です。
KnownCertificates プロパティによって返されるコレクションに X509Certificate2 クラスのインスタンスを設定します。各インスタンスは、サービスが認証を行うトークンの発行者を表します。
注 : ScopedCertificates プロパティによって返されるクライアント側のコレクションとは異なり、既知の証明書コレクションはキー付きのコレクションではありません。指定した証明書が発行するトークンは、発行済みトークンを含むメッセージを送信したクライアントのアドレスとは無関係に、サービスによって受け入れられます (その他の制約については以下で説明します)。 CertificateValidationMode プロパティを X509CertificateValidationMode 列挙値のいずれかに設定します。これは、コードでのみ設定することができます。既定値は ChainTrust です。
CertificateValidationMode プロパティが Custom に設定されている場合、カスタム X509CertificateValidator クラスのインスタンスを CustomCertificateValidator プロパティに割り当てます。
CertificateValidationMode が ChainTrust または PeerOrChainTrust に設定されている場合、RevocationMode プロパティを X509RevocationMode 列挙値にある適切な値に設定します。失効モードは PeerTrust または Custom 検証モードでは使用されないことに注意してください。
必要に応じて、カスタム SamlSerializer クラスのインスタンスを SamlSerializer プロパティに割り当てます。カスタム SAML (Security Assertions Markup Language) アサーションの解析などには、カスタム SAML シリアライザーが必要です。
構成で IssuedTokenServiceCredential のプロパティを設定するには
<serviceCredentials> 要素の子として <issuedTokenAuthentication> 要素を作成します。
CardSpace カードのように自己発行されるトークンを認証する場合は、<issuedTokenAuthentication> 要素の allowUntrustedRsaIssuers 属性を true に設定します。
<issuedTokenAuthentication> 要素の子要素として <knownCertificates> 要素を作成します。
<knownCertificates> 要素の子要素として 0 個以上の <add> 要素を作成し、storeLocation、storeName、x509FindType、および findValue 属性を使用して証明書の検索方法を指定します。
必要に応じて、<issuedTokenAuthentication> 要素の samlSerializer 属性をカスタム SamlSerializer クラスの型名に設定します。
例
次の例では、IssuedTokenServiceCredential のプロパティをコードで設定しています。
' 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
// 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;
}
クライアントがフェデレーション サービスによって認証されるためには、発行済みトークンが次のことを満たす必要があります。
発行済みトークンのデジタル署名が RSA セキュリティ キー識別子を使用している場合、AllowUntrustedRsaIssuers プロパティを true にする必要があります。
発行済みトークンの署名に X.509 発行者シリアル番号、X.509 サブジェクト キー識別子、または X.509 拇印セキュリティ識別子が使用されている場合、発行済みトークンは IssuedTokenServiceCredential クラスの KnownCertificates プロパティによって返されたコレクションにある証明書で署名されている必要があります。
発行済みトークンが X.509 証明書を使用して署名されている場合、証明書が X509RawDataKeyIdentifierClause として証明書利用者に送信されたか、KnownCertificates プロパティから取得されたかに関係なく、CertificateValidationMode プロパティの値で指定されるセマンティックスごとに証明書を検証する必要があります。X.509 証明書の検証詳細情報、「証明書の使用」を参照してください。
たとえば、CertificateValidationMode を PeerTrust に設定すると、その署名の証明書が TrustedPeople 証明書ストアに格納されている任意の発行済みトークンが認証されます。この場合、TrustedStoreLocation プロパティを CurrentUser または LocalMachine に設定します。Custom を含めて、他のモードを選択できます。Custom を選択した場合、X509CertificateValidator クラスのインスタンスを CustomCertificateValidator プロパティに割り当てる必要があります。カスタム検証では、任意の基準を使用して証明書を検証できます。詳細については、次のトピックを参照してください。、「方法 : カスタム証明書検証を使用するサービスを作成する」を参照してください。
参照
処理手順
フェデレーション サンプル
方法 : WSFederationHttpBinding のセキュリティで保護されたセッションを無効にする
方法 : WSFederationHttpBinding を作成する
方法 : フェデレーション クライアントを作成する