ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) Metode

Definisi

Saat diimplementasikan dalam kelas turunan, memeriksa otorisasi untuk subjek dalam konteks yang ditentukan untuk melakukan tindakan yang ditentukan pada sumber daya yang ditentukan.

public:
 virtual bool CheckAccess(System::Security::Claims::AuthorizationContext ^ context);
public virtual bool CheckAccess(System.Security.Claims.AuthorizationContext context);
abstract member CheckAccess : System.Security.Claims.AuthorizationContext -> bool
override this.CheckAccess : System.Security.Claims.AuthorizationContext -> bool
Public Overridable Function CheckAccess (context As AuthorizationContext) As Boolean

Parameter

context
AuthorizationContext

Konteks otorisasi yang berisi subjek, sumber daya, dan tindakan yang otorisasinya akan diperiksa.

Mengembalikan

true jika subjek berwenang untuk melakukan tindakan yang ditentukan pada sumber daya yang ditentukan; jika tidak, false.

Contoh

Contoh kode yang digunakan dalam ClaimsAuthorizationManager topik diambil dari Claims Based Authorization sampel. Sampel ini menyediakan manajer otorisasi klaim kustom yang dapat mengotorisasi subjek berdasarkan kebijakan yang ditentukan dalam konfigurasi. Manajer otorisasi klaim kustom terdiri dari tiga komponen dasar: kelas yang berasal dari ClaimsAuthorizationManager yang mengimplementasikan manajer, ResourceAction kelas yang memasangkan sumber daya dan tindakan, dan pembaca kebijakan yang membaca dan mengkompilasi kebijakan yang ditentukan dalam file konfigurasi. Kebijakan yang dikompilasi ini kemudian dapat digunakan oleh manajer otorisasi klaim untuk mengevaluasi prinsipal untuk mengotorisasi akses ke sumber daya. Tidak semua elemen ditampilkan demi brevity.

Kode berikut menunjukkan penimpaan CheckAccess metode. Metode ini memberikan atau menolak akses berdasarkan kebijakan yang dibaca dan dikompilasi dari file konfigurasi.

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;
    }
}

Kode berikut menunjukkan kelas yang ResourceAction digunakan oleh manajer klaim kustom.

using System;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Class to encapsulate resource/action pair
    /// </summary>
    public class ResourceAction
    {
        public string Resource;
        public string Action;

        /// <summary>
        /// Checks if the current instance is equal to the given object by comparing the resource and action values
        /// </summary>
        /// <param name="obj">object to compare to</param>
        /// <returns>True if equal, else false.</returns>
        public override bool Equals(object obj)
        {
            ResourceAction ra = obj as ResourceAction;
            if (ra != null)
            {
                return ((string.Compare(ra.Resource, Resource, true) == 0) && (string.Compare(ra.Action, Action, true) == 0));
            }

            return base.Equals(obj);
        }

        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            return (Resource + Action).ToLower().GetHashCode();
        }

        /// <summary>
        /// Creates an instance of ResourceAction class.
        /// </summary>
        /// <param name="resource">The resource name.</param>
        /// <param name="action">The action.</param>
        /// <exception cref="ArgumentNullException">when <paramref name="resource"/> is null</exception>
        public ResourceAction(string resource, string action)
        {
            if (string.IsNullOrEmpty(resource))
            {
                throw new ArgumentNullException("resource");
            }

            Resource = resource;
            Action = action;
        }
    }
}

Kebijakan yang digunakan oleh manajer otorisasi klaim ditentukan oleh elemen kustom <policy> di <bawah elemen claimsAuthorizationManager> . Kebijakan ini dibaca dan dikompilasi LoadCustomConfiguration oleh metode . Dalam kebijakan pertama, prinsipal harus memiliki salah satu klaim yang ditentukan untuk melakukan tindakan yang ditentukan pada sumber daya yang ditentukan. Dalam kebijakan kedua, prinsipal harus memiliki kedua klaim untuk dapat melakukan tindakan yang ditentukan pada sumber daya yang ditentukan. Di semua yang lain, prinsipal secara otomatis diberikan akses terlepas dari klaim yang dimilikinya.

<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>

Keterangan

Implementasi dasar selalu mengembalikan true, yang mengotorisasi akses. Anda dapat mengambil alih metode ini di kelas turunan untuk mengotorisasi akses berdasarkan persyaratan aplikasi RP Anda. Jika metode ini mengembalikan false, Windows Identity Foundation (WIF) mengembalikan kesalahan yang tidak sah kepada pemanggil; jika tidak, eksekusi diteruskan ke aplikasi RP.

Berlaku untuk