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
- ve WindowsIdentity özelliklerinin değerini PrimaryIdentity yazdırın.
Çağıranın taleplerini ayrıştırmak için
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
AuthorizationContext
AuthorizationContext.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: