Aracılığıyla paylaş


Nasıl yapılır: Federe İstemci Oluşturma

Windows Communication Foundation'da (WCF), federasyon hizmeti için istemci oluşturmak üç ana adımdan oluşur:

  1. wsFederationHttpBinding> veya benzer bir <özel bağlama yapılandırın. Uygun bağlama oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: WSFederation OluşturmaHttpBinding. Alternatif olarak, federasyon hizmetiyle ve bir veya daha fazla güvenlik belirteci hizmetiyle iletişim kurmak üzere bir yapılandırma dosyası oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) federasyon hizmetinin meta veri uç noktasında çalıştırın.

  2. bir istemcinin IssuedTokenClientCredential bir güvenlik belirteci hizmetiyle etkileşiminin çeşitli yönlerini denetleyenin özelliklerini ayarlayın.

  3. güvenlik belirteci hizmetleri gibi belirli uç noktalarla güvenli bir şekilde iletişim kurmak için gereken sertifikaların izin verdiği özelliklerini X509CertificateRecipientClientCredentialayarlayın.

Not

CryptographicException bir istemci kimliğine bürünülmüş kimlik bilgileri, WSFederationHttpBinding bağlama veya özel olarak verilen belirteç ve asimetrik anahtarlar kullandığında oluşturulabilir. Asimetrik anahtarlar, sırasıyla ve özellikleri olarak ayarlandığında AsymmetricKeybağlama ve KeyType özel olarak verilen belirteçlerle IssuedKeyTypeWSFederationHttpBinding birlikte kullanılır. CryptographicException, istemci bir ileti göndermeye çalıştığında ve istemcinin kimliğine bürünen kimlik için bir kullanıcı profili olmadığında oluşturulur. Bu sorunu azaltmak için, iletiyi göndermeden önce istemci bilgisayarda oturum açın veya arayın LoadUserProfile .

Bu konu başlığında, bu yordamlar hakkında ayrıntılı bilgiler sağlanmaktadır. Uygun bağlama oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: WSFederation OluşturmaHttpBinding. Federasyon hizmetinin nasıl çalıştığı hakkında daha fazla bilgi için bkz . Federasyon.

Federasyon hizmetinin yapılandırmasını oluşturmak ve incelemek için

  1. ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) hizmetin meta veri URL'sinin adresiyle komut satırı parametresi olarak çalıştırın.

  2. Oluşturulan yapılandırma dosyasını uygun bir düzenleyicide açın.

  3. Oluşturulan herhangi bir verenin ve issuerMetadata>> öğelerinin özniteliklerini ve <içeriğini inceleyin.< Bunlar wsFederationHttpBinding> veya özel bağlama öğelerinin <güvenlik> öğeleri içinde <bulunur. Adreslerin beklenen etki alanı adlarını veya diğer adres bilgilerini içerdiğinden emin olun. İstemci bu adreslerde kimlik doğrulaması gerçekleştirdiğinden ve kullanıcı adı/parola çiftleri gibi bilgileri açıkabileceğinden bu bilgileri denetlemek önemlidir. Adres beklenen adres değilse bu, bilgilerin istenmeyen bir alıcıya açıklanmasına neden olabilir.

  4. AçıklamaalternativeIssuedTokenParameters><satırı öğesinin içindeki ek< issuedTokenParameters> öğelerini inceleyin. Federasyon hizmeti için yapılandırma oluşturmak üzere Svcutil.exe aracını kullanırken, federasyon hizmeti veya herhangi bir ara güvenlik belirteci hizmeti bir veren adresi belirtmezse, birden çok uç noktayı kullanıma sunan bir güvenlik belirteci hizmeti için meta veri adresi belirtirse, sonuçta elde edilen yapılandırma dosyası ilk uç noktaya başvurur. Ek uç noktalar, açıklama satırı öğeleri <alternativeIssuedTokenParameters> olarak yapılandırma dosyasında bulunur.

    Bunlardan <issuedTokenParameters> birinin yapılandırmada zaten var olandan daha uygun olup olmadığını belirleyin. Örneğin, istemci kullanıcı adı/parola çifti yerine Windows CardSpace belirteci kullanarak bir güvenlik belirteci hizmetinde kimlik doğrulamayı tercih edebilir.

    Not

    Hizmetle iletişim kurmadan önce birden çok güvenlik belirteci hizmetinin çapraz geçiş yapması gerektiğinde, bir ara güvenlik belirteci hizmetinin istemciyi yanlış bir güvenlik belirteci hizmetine yönlendirmesi mümkündür. Bu nedenle, issuedTokenParameters> içindeki <güvenlik belirteci hizmetinin uç noktasının bilinmeyen bir güvenlik belirteci hizmeti değil beklenen güvenlik belirteci hizmeti olduğundan emin olun.

Kodda IssuedTokenClientCredential yapılandırmak için

  1. IssuedTokenClientCredentialIssuedToken Aşağıdaki örnek kodda gösterildiği gibi sınıfın ClientCredentials özelliği (sınıfın ClientBase<TChannel> özelliği tarafından ClientCredentials döndürülen veya sınıfı aracılığıyla) aracılığıyla ChannelFactory öğesine erişin.

    IssuedTokenClientCredential itcc = client.ClientCredentials.IssuedToken;
    
    Dim itcc As IssuedTokenClientCredential = client.ClientCredentials.IssuedToken
    
  2. Belirteç önbelleğe alma gerekli değilse özelliğini olarak falseayarlayınCacheIssuedTokens. özelliği, CacheIssuedTokens bir güvenlik belirteci hizmetinden bu tür belirteçlerin önbelleğe alınıp alınmayacağını denetler. Bu özellik olarak falseayarlanırsa, istemci, önceki bir belirtecin hala geçerli olup olmadığına bakılmaksızın federasyon hizmetinde yeniden kimlik doğrulaması yapması gerektiğinde güvenlik belirteci hizmetinden yeni bir belirteç ister. Bu özellik olarak trueayarlanırsa istemci, federasyon hizmetinde (belirtecin süresi dolmadığı sürece) kendi kimliğini yeniden doğrulaması gerektiğinde mevcut bir belirteci yeniden kullanıyordur. Varsayılan değer: true.

  3. Önbelleğe alınan belirteçlerde zaman sınırı gerekiyorsa özelliğini bir TimeSpan değer olarak ayarlayınMaxIssuedTokenCachingTime. özelliği, bir belirtecin ne kadar süreyle önbelleğe alınabileceğini belirtir. Belirtilen süre dolduktan sonra belirteç istemci önbelleğinden kaldırılır. Varsayılan olarak belirteçler süresiz olarak önbelleğe alınır. Aşağıdaki örnek, zaman aralığını 10 dakikaya ayarlar.

    itcc.MaxIssuedTokenCachingTime = new TimeSpan(0, 10, 0);
    
    itcc.MaxIssuedTokenCachingTime = New TimeSpan(0, 10, 0)
    
  4. isteğe bağlı. değerini IssuedTokenRenewalThresholdPercentage yüzde olarak ayarlayın. Varsayılan değer 60'tır (yüzde). özelliği belirtecin geçerlilik süresinin yüzdesini belirtir. Örneğin, verilen belirteç 10 saat geçerliyse ve IssuedTokenRenewalThresholdPercentage 80 olarak ayarlandıysa, belirteç sekiz saat sonra yenilenir. Aşağıdaki örnek değeri yüzde 80 olarak ayarlar.

    itcc.IssuedTokenRenewalThresholdPercentage = 80;
    
    itcc.IssuedTokenRenewalThresholdPercentage = 80
    

    Belirteç geçerlilik süresi tarafından belirlenen yenileme aralığı ve IssuedTokenRenewalThresholdPercentage önbelleğe alma süresinin yenileme eşik süresinden kısa olduğu durumlarda değer tarafından geçersiz kılınır MaxIssuedTokenCachingTime . Örneğin, ürününün IssuedTokenRenewalThresholdPercentage ve belirtecin süresi sekiz saat ve MaxIssuedTokenCachingTime değer 10 dakika ise, istemci güncelleştirilmiş bir belirteç için güvenlik belirteci hizmetiyle 10 dakikada bir iletişim kurar.

  5. İleti güvenliği veya ileti kimlik bilgileriyle aktarım güvenliği kullanmayan bir bağlamada (örneğin, bağlamanın bir SecurityBindingElementdeğeri yoktur) dışında CombinedEntropy bir anahtar entropi modu gerekiyorsa, özelliğini uygun bir değere ayarlayınDefaultKeyEntropyMode. Entropi modu, simetrik anahtarların DefaultKeyEntropyMode özelliği kullanılarak denetlenip denetlenemeyeceğini belirler. Bu varsayılan değerdir CombinedEntropy; burada hem istemci hem de belirteç veren gerçek anahtarı üretmek için birleştirilmiş veriler sağlar. Diğer değerler ve'dir ClientEntropyServerEntropy, yani anahtarın tamamı sırasıyla istemci veya sunucu tarafından belirtilir. Aşağıdaki örnek, özelliğini yalnızca anahtar için sunucu verilerini kullanacak şekilde ayarlar.

    itcc.DefaultKeyEntropyMode = SecurityKeyEntropyMode.ServerEntropy;
    
    itcc.DefaultKeyEntropyMode = SecurityKeyEntropyMode.ServerEntropy
    

    Not

    bir SecurityBindingElement güvenlik belirteci hizmetinde veya hizmet bağlamasında varsa, DefaultKeyEntropyMode üzerindeki IssuedTokenClientCredential kümesi özelliği SecurityBindingElementtarafından KeyEntropyMode geçersiz kılınmış olur.

  6. Verene özgü uç nokta davranışlarını özelliği tarafından IssuerChannelBehaviors döndürülen koleksiyona ekleyerek yapılandırın.

    itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior);
    
    itcc.LocalIssuerChannelBehaviors.Add(myEndpointBehavior)
    

Yapılandırmada IssuedTokenClientCredential'ı yapılandırmak için

  1. Bir uç nokta davranışında issuedToken> öğesinin< alt öğesi olarak issuedToken> öğesi oluşturun.<

  2. Belirteç önbelleğe alma gerekli değilse özniteliğini (öğesinin><issuedToken) olarak falseayarlayın.cacheIssuedTokens

  3. Önbelleğe alınan belirteçlerde bir zaman sınırı gerekiyorsa, öğesindeki maxIssuedTokenCachingTime<issuedToken> özniteliğini uygun bir değere ayarlayın. Örneğin:
    <issuedToken maxIssuedTokenCachingTime='00:10:00' />

  4. Varsayılan değer dışında bir değer tercih edilirse öğesindeki issuedTokenRenewalThresholdPercentage<issuedToken> özniteliğini uygun bir değere ayarlayın, örneğin:

    <issuedToken issuedTokenRenewalThresholdPercentage = "80" />  
    
  5. dışında CombinedEntropy bir anahtar entropi modu, ileti kimlik bilgileriyle ileti güvenliği veya aktarım güvenliği kullanmayan bir bağlamadaysa (örneğin, bağlamanın bir SecurityBindingElementöğesi yoktur), öğesindeki <issuedToken> özniteliğini gerektiği gibi veya ServerEntropyClientEntropy olarak ayarlayındefaultKeyEntropyMode.

    <issuedToken defaultKeyEntropyMode = "ServerEntropy" />  
    
  6. isteğe bağlı. Öğenin alt>issuedToken< öğesi olarak bir <issuerChannelBehaviors> öğe oluşturarak verene özgü özel uç nokta davranışlarını yapılandırın. Her davranış için öğenin alt>issuerChannelBehaviors< öğesi olarak bir <add> öğe oluşturun. öğesinde özniteliğini <add> ayarlayarak davranışın issuerAddress veren adresini belirtin. öğesinde özniteliğini ayarlayarak davranışın behaviorConfiguration<add> kendisini belirtin.

    <issuerChannelBehaviors>  
    <add issuerAddress="http://fabrikam.org/sts" behaviorConfiguration="FabrikamSTS" />  
    </issuerChannelBehaviors>  
    

Kodda X509CertificateRecipientClientCredential yapılandırmak için

  1. X509CertificateRecipientClientCredential sınıfının veya özelliğinin ClientCredentials özelliği ClientBase<TChannel> aracılığıyla ServiceCertificate öğesine erişinChannelFactory.

    X509CertificateRecipientClientCredential rcc =
        client.ClientCredentials.ServiceCertificate;
    
    Dim rcc As X509CertificateRecipientClientCredential = _
    client.ClientCredentials.ServiceCertificate
    
  2. Belirli bir uç nokta için sertifika için bir X509Certificate2 örnek varsa, özelliği tarafından ScopedCertificates döndürülen koleksiyonun yöntemini kullanınAdd.

    rcc.ScopedCertificates.Add(new Uri("http://fabrikam.com/sts"), cert);
    
    rcc.ScopedCertificates.Add(New Uri("http://fabrikam.com/sts"), cert)
    
  3. Bir X509Certificate2 örnek kullanılamıyorsa, aşağıdaki örnekte gösterildiği gibi sınıfının yöntemini X509CertificateRecipientClientCredential kullanınSetScopedCertificate.

    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"))
    

Yapılandırmada X509CertificateRecipientClientCredential yapılandırmak için

  1. Bir uç nokta davranışında clientCredentials> öğesinin< alt öğesi olan serviceCertificate> öğesinin< alt öğesi olarak scopedCertificates> öğesi oluşturun.<

  2. <add> öğesinin <scopedCertificates> alt öğesi olarak oluşturun. Uygun sertifikaya storeLocationbaşvurmak için , storeName, x509FindTypeve findValue özniteliklerinin değerlerini belirtin. özniteliğini targetUri , aşağıdaki örnekte gösterildiği gibi sertifikanın kullanılacağı uç noktanın adresini sağlayan bir değere ayarlayın.

    <scopedCertificates>  
     <add targetUri="http://fabrikam.com/sts"
          storeLocation="CurrentUser"  
          storeName="TrustedPeople"  
          x509FindType="FindBySubjectName"  
          findValue="FabrikamSTS" />  
    </scopedCertificates>  
    

Örnek

Aşağıdaki kod örneği, kodda sınıfının bir örneğini IssuedTokenClientCredential yapılandırıyor.

// 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

.NET Framework Güvenliği

Bilgilerin açığa çıkmasını önlemek için, federasyon uç noktalarından meta verileri işlemek için Svcutil.exe aracını çalıştıran istemciler, sonuçta elde edilen güvenlik belirteci hizmet adreslerinin bekledikleri gibi olmasını sağlamalıdır. Bu, özellikle bir güvenlik belirteci hizmeti birden çok uç noktayı kullanıma sunarken önemlidir çünkü Svcutil.exe aracı, istemcinin kullanması gereken uç nokta olmayan ilk uç noktayı kullanmak için sonuçta elde edilen yapılandırma dosyasını oluşturur.

LocalIssuer Gerekli

İstemcilerin her zaman bir yerel veren kullanması bekleniyorsa, aşağıdakilere dikkat edin: Svcutil.exe varsayılan çıkışı, zincirdeki ikinciden sona güvenlik belirteci hizmeti bir veren adresi veya veren meta veri adresi belirtiyorsa yerel verenin kullanılmamasıyla sonuçlanıyor.

Sınıfının , ve özelliklerini ayarlama LocalIssuerAddresshakkında daha fazla bilgi için bkz. Nasıl yapılır: Yerel VereniIssuedTokenClientCredential Yapılandırma.LocalIssuerChannelBehaviorsLocalIssuerBinding

Kapsamlı Sertifikalar

Güvenlik belirteci hizmetlerinden herhangi biriyle iletişim kurmak için hizmet sertifikaları belirtilmesi gerekiyorsa, genellikle sertifika anlaşması kullanılmadığından, sınıfın ScopedCertificatesX509CertificateRecipientClientCredential özelliği kullanılarak belirtilebilirler. SetDefaultCertificate yöntemi bir ve X509Certificate2 parametresini parametre olarak alırUri. Belirtilen sertifika, belirtilen URI'deki uç noktalarla iletişim kurarken kullanılır. Alternatif olarak, özelliği tarafından ScopedCertificates döndürülen koleksiyona sertifika eklemek için yöntemini kullanabilirsinizSetScopedCertificate.

Not

Belirli bir URI kapsamındaki sertifikaların istemci fikri yalnızca bu URI'lerdeki uç noktaları kullanıma sunan hizmetlere giden çağrılar yapan uygulamalar için geçerlidir. Sınıfı tarafından KnownCertificatesIssuedTokenServiceCredential döndürülen koleksiyondaki sunucuda yapılandırılan belirteçler gibi verilen belirteçleri imzalamak için kullanılan sertifikalar için geçerli değildir. Daha fazla bilgi için bkz . Nasıl yapılır: Federasyon Hizmetinde Kimlik Bilgilerini Yapılandırma.

Ayrıca bkz.