ServiceSecurityContext Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет контекст безопасности удаленной стороны. На клиенте представляет удостоверение службы, а на службе представляет удостоверение клиента.
public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
- Наследование
-
ServiceSecurityContext
Примеры
В следующем примере класс ServiceSecurityContext используется для предоставления сведений о текущем контексте безопасности. Код создает экземпляр класса StreamWriter для записи этой информации в файл.
// When this method runs, the caller must be an authenticated user
// and the ServiceSecurityContext is not a null instance.
public double Add(double n1, double n2)
{
// Write data from the ServiceSecurityContext to a file using the StreamWriter class.
using (StreamWriter sw = new StreamWriter(@"c:\ServiceSecurityContextInfo.txt"))
{
// 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);
// 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}, Resource: {1} Right: {2}",
claim.ClaimType,
claim.Resource.ToString(),
claim.Right);
sw.WriteLine();
}
}
}
return n1 + n2;
}
' When this method runs, the caller must be an authenticated user and the ServiceSecurityContext
' is not a null instance.
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
' Write data from the ServiceSecurityContext to a file using the StreamWriter class.
Dim sw As New StreamWriter("c:\ServiceSecurityContextInfo.txt")
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)
' 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}, Resource: {1} Right: {2}", _
claim.ClaimType, _
claim.Resource.ToString(), _
claim.Right)
sw.WriteLine()
Next claim
Next claimset
Finally
sw.Dispose()
End Try
Return n1 + n2
End Function
В следующем примере показана реализация метода CheckAccessCore, в которой класс ServiceSecurityContext используется для синтаксического анализа набора утверждений.
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
// Extract the action URI from the OperationContext. Match this against the claims
// in the AuthorizationContext.
string action = operationContext.RequestContext.RequestMessage.Headers.Action;
Console.WriteLine("action: {0}", action);
// Iterate through the various claimsets in the AuthorizationContext.
foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
// Examine only those claim sets issued by System.
if (cs.Issuer == ClaimSet.System)
{
// Iterate through claims of type "http://example.org/claims/allowedoperation".
foreach (Claim c in cs.FindClaims("http://example.org/claims/allowedoperation",
Rights.PossessProperty))
{
// Write the Claim resource to the console.
Console.WriteLine("resource: {0}", c.Resource.ToString());
// If the Claim resource matches the action URI then return true to allow access.
if (action == c.Resource.ToString())
return true;
}
}
}
// If this point is reached, return false to deny access.
return false;
}
}
Public Class MyServiceAuthorizationManager
Inherits ServiceAuthorizationManager
Protected Overrides Function CheckAccessCore(ByVal operationContext As OperationContext) As Boolean
' Extract the action URI from the OperationContext. Match this against the claims
' in the AuthorizationContext.
Dim action As String = operationContext.RequestContext.RequestMessage.Headers.Action
Console.WriteLine("action: {0}", action)
' Iterate through the various claimsets in the authorizationcontext.
Dim cs As ClaimSet
For Each cs In operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
' Examine only those claim sets issued by System.
If cs.Issuer Is ClaimSet.System Then
' Iterate through claims of type "http://example.org/claims/allowedoperation".
Dim c As Claim
For Each c In cs.FindClaims("http://example.org/claims/allowedoperation", _
Rights.PossessProperty)
' Write the Claim resource to the console.
Console.WriteLine("resource: {0}", c.Resource.ToString())
' If the Claim resource matches the action URI then return true to allow access.
If action = c.Resource.ToString() Then
Return True
End If
Next c
End If
Next cs
' If we get here, return false, denying access.
Return False
End Function
End Class
Комментарии
Данные являются частью объекта SecurityMessageProperty для сообщения.
Используйте этот класс для получения сведений о удаленном контексте безопасности во время выполнения. Контекст безопасности создается после успешного прохождения клиентом проверки подлинности и его авторизации на доступ к методу. После успешного прохождения проверки подлинности и авторизации сообщения сведения о безопасности от клиента и для текущего экземпляра службы можно получить из экземпляра данного класса.
Можно извлечь экземпляр класса ServiceSecurityContext из свойства Current класса OperationContext или использовать его из метода операции службы, как показано в следующем примере.
Анализ объекта ClaimSet
Этот класс обычно используется для получения текущего набора утверждений с целью идентификации или авторизации клиента при доступе к методу. Класс ClaimSet содержит коллекцию объектов Claim, каждый из которых можно проанализировать на предмет наличия определенного утверждения. Если заданное утверждение предоставлено, клиент может быть авторизован. Эта функциональность обеспечивается переопределением метода CheckAccessCore класса ServiceAuthorizationManager. Полный пример см. в разделе "Политика авторизации".
Режим "cookie" и свойство IsAuthenticated
В некоторых случаях свойство IsAuthenticated интерфейса IIdentity возвращает значение true
, даже если удаленный клиент прошел проверку подлинности как анонимный пользователь. (Свойство PrimaryIdentity возвращает реализацию IIdentity интерфейса.) Чтобы это произошло, должны быть верны следующие обстоятельства:
служба использует проверку подлинности Windows;
служба допускает анонимный вход;
Привязка <— это customBinding>.
пользовательская привязка включает элемент
<security>
;Элемент
<security>
содержит <secureConversationBootstrap> с заданным атрибутомrequireSecurityContextCancellation
false
.
Конструкторы
ServiceSecurityContext(AuthorizationContext) |
Инициализирует новый экземпляр класса ServiceSecurityContext указанными параметрами авторизации. |
ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>) |
Инициализирует новый экземпляр класса ServiceSecurityContext указанными параметрами авторизации и коллекцией политик. |
ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>) |
Инициализирует новый экземпляр класса ServiceSecurityContext коллекцией объектов политик. |
Свойства
Anonymous |
Возвращает экземпляр класса ServiceSecurityContext, содержащий пустую коллекцию утверждений, удостоверений и других данных контекста, которые обычно используются для представления анонимной стороны. |
AuthorizationContext |
Возвращает информацию об авторизации для экземпляра этого класса. Объект AuthorizationContext содержит коллекцию объектов ClaimSet, которые приложение может запрашивать и получать сведения о конкретной стороне. |
AuthorizationPolicies |
Возвращает коллекцию политик, связанную с экземпляром этого класса. |
Current |
Возвращает текущий ServiceSecurityContext. |
IsAnonymous |
Возвращает значение, указывающее, предоставил ли текущий клиент учетные данные службе. |
PrimaryIdentity |
Возвращает первичное удостоверение, связанное с текущим параметром. |
WindowsIdentity |
Возвращает удостоверение Windows текущего параметра. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |