ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş bir sınıfta uygulandığında, belirtilen kaynakta belirtilen eylemi gerçekleştirmek için belirtilen bağlamdaki konu için yetkilendirmeyi denetler.
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
Parametreler
- context
- AuthorizationContext
Yetkilendirmenin denetlendiği konu, kaynak ve eylemi içeren yetkilendirme bağlamı.
Döndürülenler
true
konu belirtilen kaynakta belirtilen eylemi gerçekleştirme yetkisine sahipse; aksi takdirde , false
.
Örnekler
Konu başlıklarında ClaimsAuthorizationManager kullanılan kod örnekleri örnekten Claims Based Authorization
alınır. Bu örnek, yapılandırmada belirtilen bir ilkeye göre konuları yetkilendirebilen özel talep yetkilendirme yöneticisi sağlar. Özel talep yetkilendirme yöneticisi üç temel bileşenden ClaimsAuthorizationManager oluşur: yöneticisini uygulayan bir sınıf, ResourceAction
bir kaynakla eylemi eşleştiren sınıf ve yapılandırma dosyasında belirtilen ilkeyi okuyan ve derleyen bir ilke okuyucu. Bu derlenmiş ilke daha sonra talep yetkilendirme yöneticisi tarafından kaynaklara erişim yetkisi vermek üzere bir sorumluyu değerlendirmek için kullanılabilir. Kısalık için tüm öğeler gösterilmez. Bu örnek ve WIF için kullanılabilen diğer örnekler ve bunların nereden indirileceği hakkında bilgi için bkz. WIF Kod Örneği Dizini.
Aşağıdaki kod, yönteminin geçersiz kılma işlemini CheckAccess gösterir. Bu yöntem, yapılandırma dosyasından okunan ve derlenen bir ilkeye göre erişim verir veya erişimi reddeder.
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;
}
}
Aşağıdaki kod, özel talep yöneticisi tarafından kullanılan sınıfı gösterir ResourceAction
.
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;
}
}
}
Talep yetkilendirme yöneticisi tarafından kullanılan ilke, claimsAuthorizationManager> öğesi altındaki< özel <policy>
öğeler tarafından belirtilir. Bu ilke, yöntemi tarafından LoadCustomConfiguration okunur ve derlenmiş. İlk ilkede, belirtilen kaynakta belirtilen eylemi gerçekleştirmek için sorumlunun belirtilen taleplerden birine sahip olması gerekir. İkinci ilkede, sorumlunun belirtilen kaynakta belirtilen eylemi gerçekleştirebilmesi için her iki beyana da sahip olması gerekir. Diğer tüm durumlarda, sahip olduğu taleplerden bağımsız olarak sorumluya otomatik olarak erişim verilir.
<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>
Açıklamalar
Temel uygulama her zaman erişim yetkisi veren döndürür true
. RP uygulamanızın gereksinimlerine göre erişimi yetkilendirmek için türetilmiş bir sınıfta bu yöntemi geçersiz kılabilirsiniz. Bu yöntem döndürürsefalse
, Windows Identity Foundation (WIF) çağırana yetkisiz bir hata döndürür; aksi takdirde yürütme RP uygulamasına geçirilir.