AuthorizationContext Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет сведения о контексте события авторизации. Включает субъект, представляющий вызывающий объект, запрашиваемый ресурс и выполняемое действие.
public ref class AuthorizationContext
public class AuthorizationContext
type AuthorizationContext = class
Public Class AuthorizationContext
- Наследование
-
AuthorizationContext
Примеры
Пример кода, используемый AuthorizationContext в разделе, взят из Claims Based Authorization
примера. В этом примере предоставляется пользовательский диспетчер авторизации утверждений, который может авторизовать субъекты на основе политики, указанной в конфигурации. Этот пользовательский диспетчер состоит из трех основных компонентов: класса, производного от ClaimsAuthorizationManager класса, реализующего диспетчер, класса, ResourceAction
который связывает ресурс и действие, и средства чтения политики, который считывает и компилирует политику, указанную в файле конфигурации. Затем диспетчер авторизации утверждений может использовать эту скомпилированную политику для оценки субъекта для авторизации доступа к ресурсам. Не все элементы отображаются для краткости. Сведения об этом и других примерах, доступных для WIF, и о том, где их можно скачать, см. в разделе WiF Code Sample Index.
В следующем коде CheckAccess показан метод для настраиваемого диспетчера авторизации утверждений. Вызывается функция, которая вычисляет субъект на основе ресурса и действия, указанного AuthorizationContext в . Эта функция возвращает значение true
или false
, которое предоставляет или запрещает доступ к субъекту.
static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
/// <summary>
/// Checks if the principal specified in the authorization context is authorized to perform action specified in the authorization context
/// on the specified resoure
/// </summary>
/// <param name="pec">Authorization context</param>
/// <returns>true if authorized, false otherwise</returns>
public override bool CheckAccess(AuthorizationContext pec)
{
//
// Evaluate the policy against the claims of the
// principal to determine access
//
bool access = false;
try
{
ResourceAction ra = new ResourceAction(pec.Resource.First<Claim>().Value, pec.Action.First<Claim>().Value);
access = _policies[ra](pec.Principal);
}
catch (Exception)
{
access = false;
}
return access;
}
}
В следующем XML-коде показан пример политики авторизации, указанной в конфигурации. В первой политике субъект должен обладать одним из указанных утверждений, чтобы выполнить указанное действие с указанным ресурсом. Во второй политике субъект должен обладать обоими утверждениями, чтобы иметь возможность выполнять указанное действие с указанным ресурсом. Во всех остальных субъектам автоматически предоставляется доступ независимо от требований, которыми он обладает.
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
<policy resource="http://localhost:28491/Developers.aspx" action="GET">
<or>
<claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
<claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
</or>
</policy>
<policy resource="http://localhost:28491/Administrators.aspx" action="GET">
<and>
<claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
<claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
</and>
</policy>
<policy resource="http://localhost:28491/Default.aspx" action="GET">
</policy>
<policy resource="http://localhost:28491/" action="GET">
</policy>
<policy resource="http://localhost:28491/Claims.aspx" action="GET">
</policy>
</claimsAuthorizationManager>
...
</identityConfiguration>
</system.identityModel>
Комментарии
Класс AuthorizationContext представляет контекст, используемый диспетчером авторизации утверждений , реализацией ClaimsAuthorizationManager класса , чтобы определить, должен ли субъект (субъект) быть авторизован для выполнения указанного действия с заданным ресурсом. Диспетчер авторизации утверждений оценивает контекст авторизации в методе CheckAccess и либо запрещает, либо предоставляет доступ на основе утверждений, представленных субъектом.
Свойство Principal содержит субъект, для которого запрашивается авторизация, Resource свойство содержит ресурс, на котором авторизоваться субъект, а Action свойство содержит действия, которые субъект намерен выполнить с ресурсом. И ресурс, и действие представлены в виде коллекции утверждений; однако в большинстве случаев каждая коллекция содержит одно утверждение.
Конструкторы
AuthorizationContext(ClaimsPrincipal, Collection<Claim>, Collection<Claim>) |
Инициализирует новый экземпляр класса AuthorizationContext с указанным субъектом, требованием ресурса и требованием действия. |
AuthorizationContext(ClaimsPrincipal, String, String) |
Инициализирует новый экземпляр класса AuthorizationContext с указанным субъектом, именем ресурса и именем действия. |
Свойства
Action |
Получает действие, для которого должен быть авторизован субъект. |
Principal |
Получает субъект, для которого запрашивается авторизация. |
Resource |
Получает ресурс, на котором должен быть авторизован субъект. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |