Поделиться через


AuthorizationContext Класс

Определение

Предоставляет контекстные сведения о событии авторизации. К ним относится субъект, представляющий вызывающий объект, запрашиваемый ресурс и выполняемые действия.

public ref class AuthorizationContext
public class AuthorizationContext
type AuthorizationContext = class
Public Class AuthorizationContext
Наследование
AuthorizationContext

Примеры

Пример кода, используемый в AuthorizationContext этом разделе, взят из Claims Based Authorization примера. В этом примере представлен пользовательский диспетчер авторизации утверждений, который может авторизовать субъекты на основе политики, указанной в конфигурации. Этот пользовательский диспетчер состоит из трех основных компонентов: класса, производного от ClaimsAuthorizationManager этого диспетчера, класса, ResourceAction который объединяет ресурс и действие, а также средство чтения политик, которое считывает и компилирует политику, указанную в файле конфигурации. Затем эту скомпилированную политику можно использовать диспетчером авторизации утверждений для оценки субъекта для авторизации доступа к ресурсам. Не все элементы отображаются ради краткости. Сведения об этом примере и других примерах, доступных для WIF и о том, где их скачать, см. в разделе "Пример кода WIF".

В следующем коде 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)

Применяется к