Aracılığıyla paylaş


Nasıl Yapılır: Güvenlik Bağlamını İnceleme

Windows Communication Foundation (WCF) hizmetlerini programlama sırasında hizmet güvenlik bağlamı, hizmette kimlik doğrulaması yapmak için kullanılan istemci kimlik bilgileri ve talepleri hakkındaki ayrıntıları belirlemenize olanak tanır. Bu, sınıfının özellikleri ServiceSecurityContext kullanılarak yapılır.

Örneğin, veya WindowsIdentity özelliğini kullanarak PrimaryIdentity geçerli istemcinin kimliğini alabilirsiniz. İstemcinin anonim olup olmadığını belirlemek için özelliğini kullanın IsAnonymous .

Ayrıca, özelliğindeki talep koleksiyonu aracılığıyla yineleyerek istemci adına hangi taleplerin AuthorizationContext yapıldığını belirleyebilirsiniz.

Geçerli güvenlik bağlamını almak için

  • Geçerli güvenlik bağlamını almak için statik özelliğe Current erişin. Geçerli bağlamın özelliklerinden herhangi birini başvurudan inceleyin.

Çağıranın kimliğini belirlemek için

  1. ve WindowsIdentity özelliklerinin değerini PrimaryIdentity yazdırın.

Çağıranın taleplerini ayrıştırmak için

  1. Geçerli AuthorizationContext sınıfı döndürür. Current geçerli hizmet güvenlik bağlamını döndürmek için özelliğini kullanın, ardından özelliğini kullanarak değerini döndürebilirsiniz AuthorizationContextAuthorizationContext.

  2. sınıfının özelliği tarafından ClaimSets döndürülen nesne koleksiyonunu ClaimSet ayrıştırınAuthorizationContext.

Örnek

Aşağıdaki örnek geçerli güvenlik bağlamının ve özelliğinin WindowsIdentity ve PrimaryIdentityClaimType özelliklerinin değerlerini, talebin kaynak değerini ve Right geçerli güvenlik bağlamındaki her talebin özelliğini yazdırır.

// Run this method from within a method protected by the PrincipalPermissionAttribute
// to see the security context data, including the primary identity.
public void WriteServiceSecurityContextData(string fileName)
{
    using (StreamWriter sw = new StreamWriter(fileName))
    {
        // Write the primary identity and Windows identity. The primary identity is derived from
        // the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name);
        sw.WriteLine();
        // Write the claimsets in the authorization context. By default, there is only one claimset
        // provided by the system.
        foreach (ClaimSet claimset in ServiceSecurityContext.Current.AuthorizationContext.ClaimSets)
        {
            foreach (Claim claim in claimset)
            {
                // Write out each claim type, claim value, and the right. There are two
                // possible values for the right: "identity" and "possessproperty".
                sw.WriteLine("Claim Type = {0}", claim.ClaimType);
                sw.WriteLine("\t Resource = {0}", claim.Resource.ToString());
                sw.WriteLine("\t Right = {0}", claim.Right);
            }
        }
    }
}

' Run this method from within a method protected by the PrincipalPermissionAttribute
' to see the security context data, including the primary identity.
Public Sub WriteServiceSecurityContextData(ByVal fileName As String)
    Dim sw As New StreamWriter(fileName)
    Try
        ' Write the primary identity and Windows identity. The primary identity is derived from 
        ' the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name)
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name)
        sw.WriteLine()
        ' Write the claimsets in the authorization context. By default, there is only one claimset
        ' provided by the system. 
        Dim claimset As ClaimSet
        For Each claimset In ServiceSecurityContext.Current.AuthorizationContext.ClaimSets
            Dim claim As Claim
            For Each claim In claimset
                ' Write out each claim type, claim value, and the right. There are two
                ' possible values for the right: "identity" and "possessproperty". 
                sw.WriteLine("Claim Type = {0}", claim.ClaimType)
                sw.WriteLine(vbTab + " Resource = {0}", claim.Resource.ToString())
                sw.WriteLine(vbTab + " Right = {0}", claim.Right)
            Next claim
        Next claimset
    Finally
        sw.Dispose()
    End Try

End Sub

Kod Derleniyor

Kod aşağıdaki ad alanlarını kullanır:

Ayrıca bkz.