Instrukcje: Tworzenie klienta federacyjnego
W programie Windows Communication Foundation (WCF) tworzenie klienta dla usługi federacyjnej składa się z trzech głównych kroków:
Skonfiguruj powiązanie <niestandardowe wsFederationHttpBinding> lub podobne. Aby uzyskać więcej informacji na temat tworzenia odpowiedniego powiązania, zobacz How to: Create a WSFederationHttpBinding (Instrukcje: tworzenie federacji WSFederationHttpBinding). Alternatywnie uruchom narzędzie ServiceModel Metadata Tool (Svcutil.exe) względem punktu końcowego metadanych usługi federacyjnej, aby wygenerować plik konfiguracji do komunikacji z usługą federacyjną i co najmniej jedną usługą tokenu zabezpieczającego.
Ustaw właściwości IssuedTokenClientCredential , które steruje różnymi aspektami interakcji klienta z usługą tokenu zabezpieczającego.
Ustaw właściwości X509CertificateRecipientClientCredentialelementu , które umożliwiają certyfikatom wymaganym do bezpiecznego komunikowania się z określonymi punktami końcowymi, takimi jak usługi tokenów zabezpieczających.
Uwaga
Element CryptographicException może być zgłaszany, gdy klient używa personifikowanych poświadczeń, WSFederationHttpBinding powiązania lub tokenu wystawionego przez użytkownika niestandardowego oraz kluczy asymetrycznych. Klucze asymetryczne są używane z powiązaniami WSFederationHttpBinding i tokenami wystawionymi niestandardowymi, gdy IssuedKeyType właściwości i KeyType , odpowiednio, są ustawione na AsymmetricKeywartość . Element CryptographicException jest zgłaszany, gdy klient próbuje wysłać komunikat, a profil użytkownika nie istnieje dla tożsamości, którą klient personifikuje. Aby rozwiązać ten problem, zaloguj się na komputerze klienckim lub wywołaj połączenie LoadUserProfile
przed wysłaniem komunikatu.
Ten temat zawiera szczegółowe informacje o tych procedurach. Aby uzyskać więcej informacji na temat tworzenia odpowiedniego powiązania, zobacz How to: Create a WSFederationHttpBinding (Instrukcje: tworzenie federacji WSFederationHttpBinding). Aby uzyskać więcej informacji na temat działania usługi federacyjnej, zobacz Federacja.
Aby wygenerować i zbadać konfigurację usługi federacyjnej
Uruchom narzędzie ServiceModel Metadata Tool (Svcutil.exe) przy użyciu adresu URL metadanych usługi jako parametru wiersza polecenia.
Otwórz wygenerowany plik konfiguracji w odpowiednim edytorze.
Sprawdź atrybuty i zawartość wszystkich wygenerowanych elementów wystawcy> i <wystawcyMetadata>.< Znajdują się one w elementach <zabezpieczeń> dla <elementów wsFederationHttpBinding> lub niestandardowych powiązań. Upewnij się, że adresy zawierają oczekiwane nazwy domen lub inne informacje o adresach. Ważne jest, aby sprawdzić te informacje, ponieważ klient uwierzytelnia się na tych adresach i może ujawnić informacje, takie jak nazwy użytkownika/pary haseł. Jeśli adres nie jest oczekiwanym adresem, może to spowodować ujawnienie informacji niezamierzonemu odbiorcy.
Sprawdź wszelkie dodatkowe <elementy issuedTokenParameters> wewnątrz skomentowanego
<alternativeIssuedTokenParameters>
elementu. W przypadku używania narzędzia Svcutil.exe do generowania konfiguracji dla usługi federacyjnej, jeśli usługa federacyjna lub usługi pośredniego tokenu zabezpieczającego nie określają adresu wystawcy, ale raczej określają adres metadanych dla usługi tokenu zabezpieczającego, która uwidacznia wiele punktów końcowych, wynikowy plik konfiguracji odnosi się do pierwszego punktu końcowego. Dodatkowe punkty końcowe znajdują się<alternativeIssuedTokenParameters>
w pliku konfiguracji jako elementy komentarza.Ustal, czy jeden z tych
<issuedTokenParameters>
elementów jest preferowany do tej, która jest już obecna w konfiguracji. Na przykład klient może preferować uwierzytelnianie w usłudze tokenu zabezpieczającego przy użyciu tokenu Usługi KartSpace systemu Windows, a nie pary nazw użytkowników/haseł.Uwaga
Jeśli przed komunikacją z usługą należy przejść przez wiele usług tokenów zabezpieczających, usługa pośredniego tokenu zabezpieczającego może skierować klienta do nieprawidłowej usługi tokenu zabezpieczającego. W związku z tym upewnij się, że punkt końcowy usługi tokenu zabezpieczającego w wystawionej <aplikacjiTokenParameters> jest oczekiwaną usługą tokenu zabezpieczającego, a nie nieznaną usługą tokenu zabezpieczającego.
Aby skonfigurować element IssuedTokenClientCredential w kodzie
IssuedTokenClientCredential Uzyskaj dostęp do właściwości IssuedToken ClientCredentials klasy (zwracanej przez ClientCredentials właściwość ClientBase<TChannel> klasy lub za pośrednictwem klasy), jak pokazano w poniższym przykładowym ChannelFactory kodzie.
IssuedTokenClientCredential itcc = client.ClientCredentials.IssuedToken;
Dim itcc As IssuedTokenClientCredential = client.ClientCredentials.IssuedToken
Jeśli buforowanie tokenów nie jest wymagane, ustaw CacheIssuedTokens właściwość na
false
. Właściwość CacheIssuedTokens określa, czy takie tokeny z usługi tokenu zabezpieczającego są buforowane. Jeśli ta właściwość jest ustawiona nafalse
, klient żąda nowego tokenu z usługi tokenu zabezpieczającego zawsze, gdy musi ponownie uwierzytelnić się w usłudze federacyjnej, niezależnie od tego, czy poprzedni token jest nadal prawidłowy. Jeśli ta właściwość jest ustawiona natrue
, klient ponownie używa istniejącego tokenu zawsze, gdy musi ponownie uwierzytelnić się w usłudze federacyjnej (o ile token nie wygasł). Wartość domyślna totrue
.Jeśli dla tokenów buforowanych jest wymagany limit czasu, ustaw MaxIssuedTokenCachingTime właściwość na TimeSpan wartość. Właściwość określa, jak długo można buforować token. Po upływie określonego przedziału czasu token zostanie usunięty z pamięci podręcznej klienta. Domyślnie tokeny są buforowane na czas nieokreślony. W poniższym przykładzie ustawiono przedział czasu na 10 minut.
itcc.MaxIssuedTokenCachingTime = new TimeSpan(0, 10, 0);
itcc.MaxIssuedTokenCachingTime = New TimeSpan(0, 10, 0)
Opcjonalny. IssuedTokenRenewalThresholdPercentage Ustaw wartość procentową. Wartość domyślna to 60 (procent). Właściwość określa procent okresu ważności tokenu. Jeśli na przykład wystawiony token jest ważny przez 10 godzin i IssuedTokenRenewalThresholdPercentage jest ustawiony na 80, token zostanie odnowiony po ośmiu godzinach. Poniższy przykład ustawia wartość na 80 procent.
itcc.IssuedTokenRenewalThresholdPercentage = 80;
itcc.IssuedTokenRenewalThresholdPercentage = 80
Interwał odnawiania określony przez okres ważności tokenu i
IssuedTokenRenewalThresholdPercentage
wartość jest zastępowana przezMaxIssuedTokenCachingTime
wartość w przypadkach, gdy czas buforowania jest krótszy niż czas progu odnowienia. Jeśli na przykład produktIssuedTokenRenewalThresholdPercentage
i czas trwania tokenu wynosi osiem godzin, aMaxIssuedTokenCachingTime
wartość to 10 minut, klient kontaktuje się z usługą tokenu zabezpieczającego dla zaktualizowanego tokenu co 10 minut.Jeśli tryb entropii klucza inny niż CombinedEntropy jest wymagany w powiązaniu, które nie używa zabezpieczeń komunikatów ani zabezpieczeń transportu z poświadczeniami komunikatu (na przykład powiązanie nie ma SecurityBindingElement), ustaw DefaultKeyEntropyMode właściwość na odpowiednią wartość. Tryb entropii określa, czy klucze symetryczne mogą być kontrolowane za pomocą DefaultKeyEntropyMode właściwości . Ta wartość domyślna to CombinedEntropy, gdzie zarówno klient, jak i wystawca tokenu dostarczają dane połączone w celu wygenerowania rzeczywistego klucza. Inne wartości to ClientEntropy i ServerEntropy, co oznacza, że cały klucz jest określany odpowiednio przez klienta lub serwer. Poniższy przykład ustawia właściwość tak, aby używała tylko danych serwera dla klucza.
itcc.DefaultKeyEntropyMode = SecurityKeyEntropyMode.ServerEntropy;
itcc.DefaultKeyEntropyMode = SecurityKeyEntropyMode.ServerEntropy
Uwaga
Jeśli element SecurityBindingElement znajduje się w usłudze tokenu zabezpieczającego lub powiązaniu usługi, DefaultKeyEntropyMode ustawienie włączone IssuedTokenClientCredential jest zastępowane przez KeyEntropyMode właściwość
SecurityBindingElement
.Skonfiguruj wszelkie zachowania punktów końcowych specyficznych dla wystawcy, dodając je do kolekcji zwróconej IssuerChannelBehaviors przez właściwość .
itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior);
itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior)
Aby skonfigurować element IssuedTokenClientCredential w konfiguracji
<Utwórz element issuedToken> jako element podrzędny <elementu issuedToken> w zachowaniu punktu końcowego.
Jeśli buforowanie tokenów nie jest wymagane, ustaw
cacheIssuedTokens
atrybut (elementu<issuedToken>
) nafalse
wartość .Jeśli dla buforowanych tokenów jest wymagany limit czasu, ustaw
maxIssuedTokenCachingTime
atrybut elementu<issuedToken>
na odpowiednią wartość. Na przykład:<issuedToken maxIssuedTokenCachingTime='00:10:00' />
.Jeśli preferowana jest wartość inna niż domyślna, ustaw
issuedTokenRenewalThresholdPercentage
atrybut elementu<issuedToken>
na odpowiednią wartość, na przykład:<issuedToken issuedTokenRenewalThresholdPercentage = "80" />
Jeśli tryb entropii klucza inny niż
CombinedEntropy
w powiązaniu, które nie korzysta z zabezpieczeń komunikatów lub zabezpieczeń transportu z poświadczeniami komunikatu (na przykład powiązanie nie maSecurityBindingElement
), ustawdefaultKeyEntropyMode
atrybut elementu na<issuedToken>
ServerEntropy
wartość lubClientEntropy
zgodnie z potrzebami.<issuedToken defaultKeyEntropyMode = "ServerEntropy" />
Opcjonalny. Skonfiguruj zachowanie niestandardowego punktu końcowego specyficznego dla wystawcy, tworząc
<issuerChannelBehaviors>
element jako element podrzędny<issuedToken>
elementu. Dla każdego zachowania utwórz<add>
element jako element podrzędny<issuerChannelBehaviors>
elementu. Określ adres wystawcy zachowania, ustawiającissuerAddress
atrybut w elemencie<add>
. Określ zachowanie, ustawiającbehaviorConfiguration
atrybut na elemecie<add>
.<issuerChannelBehaviors> <add issuerAddress="http://fabrikam.org/sts" behaviorConfiguration="FabrikamSTS" /> </issuerChannelBehaviors>
Aby skonfigurować element X509CertificateRecipientClientCredential w kodzie
X509CertificateRecipientClientCredential Dostęp do właściwości ServiceCertificate ClientCredentials właściwości ClientBase<TChannel> klasy lub ChannelFactory właściwości.
X509CertificateRecipientClientCredential rcc = client.ClientCredentials.ServiceCertificate;
Dim rcc As X509CertificateRecipientClientCredential = _ client.ClientCredentials.ServiceCertificate
X509Certificate2 Jeśli wystąpienie jest dostępne dla certyfikatu dla danego punktu końcowego, użyj Add metody kolekcji zwróconej ScopedCertificates przez właściwość .
rcc.ScopedCertificates.Add(new Uri("http://fabrikam.com/sts"), cert);
rcc.ScopedCertificates.Add(New Uri("http://fabrikam.com/sts"), cert)
X509Certificate2 Jeśli wystąpienie jest niedostępne, użyj SetScopedCertificate metody X509CertificateRecipientClientCredential klasy, jak pokazano w poniższym przykładzie.
public void snippet20(CalculatorClient client) { X509CertificateRecipientClientCredential rcc = client.ClientCredentials.ServiceCertificate; rcc.SetScopedCertificate(StoreLocation.CurrentUser, StoreName.TrustedPeople, X509FindType.FindBySubjectName, "FabrikamSTS", new Uri("http://fabrikam.com/sts")); }
rcc.SetScopedCertificate(StoreLocation.CurrentUser, _ StoreName.TrustedPeople, _ X509FindType.FindBySubjectName, _ "FabrikamSTS", _ New Uri("http://fabrikam.com/sts"))
Aby skonfigurować element X509CertificateRecipientClientCredential w konfiguracji
Utwórz element scopedCertificates> jako element podrzędny <elementu serviceCertificate>, który jest samym elementem podrzędnym< elementu clientCredentials> w zachowaniu punktu końcowego.<
<add>
Utwórz element jako element podrzędny<scopedCertificates>
elementu. Określ wartości atrybutówstoreLocation
, ,x509FindType
storeName
ifindValue
, aby odwoływać się do odpowiedniego certyfikatu.targetUri
Ustaw atrybut na wartość, która udostępnia adres punktu końcowego, dla którego ma być używany certyfikat, jak pokazano w poniższym przykładzie.<scopedCertificates> <add targetUri="http://fabrikam.com/sts" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" findValue="FabrikamSTS" /> </scopedCertificates>
Przykład
Poniższy przykładowy kod konfiguruje wystąpienie IssuedTokenClientCredential klasy w kodzie.
// This method configures the IssuedToken property of the Credentials property of a proxy/channel factory
public static void ConfigureIssuedTokenClientCredentials(ChannelFactory cf, bool cacheTokens,
TimeSpan tokenCacheTime, int renewalPercentage,
SecurityKeyEntropyMode entropyMode
)
{
if (cf == null)
{
throw new ArgumentNullException("cf");
}
// Set the CacheIssuedTokens property
cf.Credentials.IssuedToken.CacheIssuedTokens = cacheTokens;
// Set the MaxIssuedTokenCachingTime property
cf.Credentials.IssuedToken.MaxIssuedTokenCachingTime = tokenCacheTime;
// Set the IssuedTokenRenewalThresholdPercentage property
cf.Credentials.IssuedToken.IssuedTokenRenewalThresholdPercentage = renewalPercentage;
// Set the DefaultKeyEntropyMode property
cf.Credentials.IssuedToken.DefaultKeyEntropyMode = entropyMode;
}
' This method configures the IssuedToken property of the Credentials property of a proxy/channel factory
Public Shared Sub ConfigureIssuedTokenClientCredentials(ByVal cf As ChannelFactory, _
ByVal cacheTokens As Boolean, _
ByVal tokenCacheTime As TimeSpan, _
ByVal renewalPercentage As Integer, _
ByVal entropyMode As SecurityKeyEntropyMode)
If cf Is Nothing Then
Throw New ArgumentNullException("ChannelFactory")
End If
' Set the CacheIssuedTokens property
With cf.Credentials.IssuedToken
.CacheIssuedTokens = cacheTokens
' Set the MaxIssuedTokenCachingTime property
.MaxIssuedTokenCachingTime = tokenCacheTime
' Set the IssuedTokenRenewalThresholdPercentage property
.IssuedTokenRenewalThresholdPercentage = renewalPercentage
' Set the DefaultKeyEntropyMode property
.DefaultKeyEntropyMode = entropyMode
End With
End Sub
Zabezpieczenia.NET Framework
Aby zapobiec możliwemu ujawnieniu informacji, klienci, którzy uruchamiają narzędzie Svcutil.exe do przetwarzania metadanych z federacyjnych punktów końcowych, powinni upewnić się, że wynikowe adresy usługi tokenu zabezpieczającego są oczekiwane. Jest to szczególnie ważne, gdy usługa tokenu zabezpieczającego uwidacznia wiele punktów końcowych, ponieważ narzędzie Svcutil.exe generuje wynikowy plik konfiguracji do użycia pierwszego takiego punktu końcowego, który może nie być tym, którego klient powinien używać.
Wymagane ustawienia lokalne
Jeśli klienci mają zawsze używać lokalnego wystawcy, należy pamiętać o następujących kwestiach: domyślne dane wyjściowe Svcutil.exe powodują, że lokalny wystawca nie jest używany, jeśli usługa tokenu zabezpieczającego drugiego do ostatniego w łańcuchu określa adres wystawcy lub adres metadanych wystawcy.
Aby uzyskać więcej informacji na temat ustawiania LocalIssuerAddresswłaściwości IssuedTokenClientCredential klasy , LocalIssuerBindingiLocalIssuerChannelBehaviors, zobacz How to: Configure a Local Issuer (Jak skonfigurować wystawcę lokalnego).
Certyfikaty o określonym zakresie
Jeśli certyfikaty usługi muszą być określone do komunikowania się z dowolną usługą tokenu zabezpieczającego, zazwyczaj dlatego, że nie są używane negocjacje certyfikatów, można je określić przy użyciu ScopedCertificates właściwości X509CertificateRecipientClientCredential klasy. Metoda SetDefaultCertificate przyjmuje Uri parametr i X509Certificate2 jako parametry. Określony certyfikat jest używany podczas komunikacji z punktami końcowymi w określonym identyfikatorze URI. Alternatywnie możesz użyć SetScopedCertificate metody , aby dodać certyfikat do kolekcji zwróconej ScopedCertificates przez właściwość .
Uwaga
Idea klienta certyfikatów, które są ograniczone do danego identyfikatora URI, ma zastosowanie tylko do aplikacji wykonujących wywołania wychodzące do usług, które uwidaczniają punkty końcowe w tych identyfikatorach URI. Nie dotyczy certyfikatów używanych do podpisywania wystawionych tokenów, takich jak te skonfigurowane na serwerze w kolekcji zwróconej przez KnownCertificates klasę IssuedTokenServiceCredential . Aby uzyskać więcej informacji, zobacz How to: Configure Credentials on a Federation Service (Instrukcje: konfigurowanie poświadczeń w usłudze federacyjnej).
Zobacz też
- Federacja — przykład
- Instrukcje: wyłączanie bezpiecznej sesji przy użyciu klasy WSFederationHttpBinding
- Instrukcje: tworzenie elementu WSFederationHttpBinding
- Instrukcje: konfigurowanie poświadczeń usługi federacyjnej
- Instrukcje: konfigurowanie lokalnego wystawcy
- Zagadnienia dotyczące zabezpieczeń obejmujące metadane
- Instrukcje: bezpieczne punkty końcowe metadanych