Share via


ASP.NET Core'da kaynak tabanlı yetkilendirme

Yetkilendirme yaklaşımı kaynağa bağlıdır. Örneğin, belgeyi güncelleştirmek için yalnızca belgenin yazarı yetkilidir. Sonuç olarak, yetkilendirme değerlendirmesi gerçekleştirilmeden önce belgenin veri deposundan alınması gerekir.

Öznitelik değerlendirmesi, veri bağlamadan önce ve belgeyi yükleyen sayfa işleyicisi veya eylemi yürütülmeden önce gerçekleşir. Bu nedenlerden dolayı, bir [Authorize] öznitelikle bildirim temelli yetkilendirme yeterli değildir. Bunun yerine, kesinlik temelli yetkilendirme olarak bilinen bir stil olan özel yetkilendirme yöntemini çağırabilirsiniz.

Örnek kodu görüntüleme veya indirme (indirme).

Yetkilendirmeyle korunan kullanıcı verileriyle bir ASP.NET Core uygulaması oluşturma, kaynak tabanlı yetkilendirme kullanan örnek bir uygulama içerir.

Kesinlik temelli yetkilendirmeyi kullanma

Yetkilendirme bir IAuthorizationService hizmet olarak uygulanır ve uygulama başlangıcında hizmet koleksiyonuna kaydedilir. Hizmet, sayfa işleyicilerine veya eylemlerine bağımlılık ekleme yoluyla kullanılabilir hale getirilir.

public class DocumentController : Controller
{
    private readonly IAuthorizationService _authorizationService;
    private readonly IDocumentRepository _documentRepository;

    public DocumentController(IAuthorizationService authorizationService,
                              IDocumentRepository documentRepository)
    {
        _authorizationService = authorizationService;
        _documentRepository = documentRepository;
    }

IAuthorizationService iki AuthorizeAsync yöntem aşırı yüklemesine sahiptir: biri kaynağı, ilke adını, diğeri de kaynağı kabul eden ve değerlendirilecek gereksinimlerin listesi.

Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          IEnumerable<IAuthorizationRequirement> requirements);
Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          string policyName);

Aşağıdaki örnekte, güvenliği sağlanacak kaynak özel Document bir nesneye yüklenir. AuthorizeAsync Geçerli kullanıcının sağlanan belgeyi düzenlemesine izin verilip verilmediğini belirlemek için bir aşırı yükleme çağrılır. Özel bir "EditPolicy" yetkilendirme ilkesi karara dahil edilir. Yetkilendirme ilkeleri oluşturma hakkında daha fazla bilgi için bkz. Özel ilke tabanlı yetkilendirme.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, "EditPolicy");

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Kaynak tabanlı işleyici yazma

Kaynak tabanlı yetkilendirme için işleyici yazmak, düz gereksinimler işleyicisi yazmaktan çok farklı değildir. Özel bir gereksinim sınıfı oluşturun ve bir gereksinim işleyici sınıfı uygulayın. Gereksinim sınıfı oluşturma hakkında daha fazla bilgi için bkz . Gereksinimler.

İşleyici sınıfı hem gereksinimi hem de kaynak türünü belirtir. Örneğin, ve kaynağını kullanan SameAuthorRequirement bir Document işleyici aşağıdaki gibidir:

public class DocumentAuthorizationHandler : 
    AuthorizationHandler<SameAuthorRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   SameAuthorRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

public class SameAuthorRequirement : IAuthorizationRequirement { }

Yukarıdaki örnekte, bunun daha genel SpecificAuthorRequirement bir sınıfın özel bir durumu olduğunu SameAuthorRequirement düşünün. SpecificAuthorRequirement sınıfı (gösterilmez), yazarın adını temsil eden bir Name özellik içerir. Name özelliği geçerli kullanıcıya ayarlanabilir.

gereksinimini ve işleyicisini içinde Program.cskaydedin:

builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("EditPolicy", policy =>
        policy.Requirements.Add(new SameAuthorRequirement()));
});

builder.Services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationHandler>();
builder.Services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationCrudHandler>();
builder.Services.AddScoped<IDocumentRepository, DocumentRepository>();

operasyonel gereksinimler

CRUD (Oluşturma, Okuma, Güncelleştirme, Silme) işlemlerinin sonuçlarına göre kararlar alırsanız yardımcı sınıfını OperationAuthorizationRequirement kullanın. Bu sınıf, her işlem türü için tek bir sınıf yerine tek bir işleyici yazmanızı sağlar. Bunu kullanmak için bazı işlem adları sağlayın:

public static class Operations
{
    public static OperationAuthorizationRequirement Create =
        new OperationAuthorizationRequirement { Name = nameof(Create) };
    public static OperationAuthorizationRequirement Read =
        new OperationAuthorizationRequirement { Name = nameof(Read) };
    public static OperationAuthorizationRequirement Update =
        new OperationAuthorizationRequirement { Name = nameof(Update) };
    public static OperationAuthorizationRequirement Delete =
        new OperationAuthorizationRequirement { Name = nameof(Delete) };
}

İşleyici, bir OperationAuthorizationRequirement gereksinim ve Document kaynak kullanılarak aşağıdaki gibi uygulanır:

public class DocumentAuthorizationCrudHandler :
    AuthorizationHandler<OperationAuthorizationRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   OperationAuthorizationRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author &&
            requirement.Name == Operations.Read.Name)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

Yukarıdaki işleyici, kaynağı, kullanıcının kimliğini ve gereksinimin Name özelliğini kullanarak işlemi doğrular.

İşletimsel kaynak işleyicisi ile sınama ve yasak

Bu bölümde, sınama ve yasak eylem sonuçlarının nasıl işlendiği ve sınama ile yasakların ne kadar farklı olduğu gösterilmektedir.

İşlemsel kaynak işleyicisini çağırmak AuthorizeAsync için, sayfa işleyicinizde veya eyleminizde çağrı yaparken işlemi belirtin. Aşağıdaki örnek, kimliği doğrulanmış kullanıcının sağlanan belgeyi görüntülemesine izin verilip verilmeyeceğini belirler.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, Operations.Read);

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Yetkilendirme başarılı olursa, belgeyi görüntüleme sayfası döndürülür. Yetkilendirme başarısız olursa ancak kullanıcının kimliği doğrulanırsa, geri dönmek ForbidResult herhangi bir kimlik doğrulama ara yazılımını yetkilendirmenin başarısız olduğunu bildirir. ChallengeResult Kimlik doğrulamasının gerçekleştirilmesi gerektiğinde bir döndürülür. Etkileşimli tarayıcı istemcileri için kullanıcıyı bir oturum açma sayfasına yönlendirmek uygun olabilir.

Yetkilendirme yaklaşımı kaynağa bağlıdır. Örneğin, belgeyi güncelleştirmek için yalnızca belgenin yazarı yetkilidir. Sonuç olarak, yetkilendirme değerlendirmesi gerçekleştirilmeden önce belgenin veri deposundan alınması gerekir.

Öznitelik değerlendirmesi, veri bağlamadan önce ve belgeyi yükleyen sayfa işleyicisi veya eylemi yürütülmeden önce gerçekleşir. Bu nedenlerden dolayı, bir [Authorize] öznitelikle bildirim temelli yetkilendirme yeterli değildir. Bunun yerine, kesinlik temelli yetkilendirme olarak bilinen bir stil olan özel yetkilendirme yöntemini çağırabilirsiniz.

Örnek kodu görüntüleme veya indirme (indirme).

Yetkilendirmeyle korunan kullanıcı verileriyle bir ASP.NET Core uygulaması oluşturma, kaynak tabanlı yetkilendirme kullanan örnek bir uygulama içerir.

Kesinlik temelli yetkilendirmeyi kullanma

Yetkilendirme bir IAuthorizationService hizmet olarak uygulanır ve sınıfındaki hizmet koleksiyonuna Startup kaydedilir. Hizmet, sayfa işleyicilerine veya eylemlerine bağımlılık ekleme yoluyla kullanılabilir hale getirilir.

public class DocumentController : Controller
{
    private readonly IAuthorizationService _authorizationService;
    private readonly IDocumentRepository _documentRepository;

    public DocumentController(IAuthorizationService authorizationService,
                              IDocumentRepository documentRepository)
    {
        _authorizationService = authorizationService;
        _documentRepository = documentRepository;
    }

IAuthorizationService iki AuthorizeAsync yöntem aşırı yüklemesine sahiptir: biri kaynağı, ilke adını, diğeri de kaynağı kabul eden ve değerlendirilecek gereksinimlerin listesi.

Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          IEnumerable<IAuthorizationRequirement> requirements);
Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          string policyName);

Aşağıdaki örnekte, güvenliği sağlanacak kaynak özel Document bir nesneye yüklenir. AuthorizeAsync Geçerli kullanıcının sağlanan belgeyi düzenlemesine izin verilip verilmediğini belirlemek için bir aşırı yükleme çağrılır. Özel bir "EditPolicy" yetkilendirme ilkesi karara dahil edilir. Yetkilendirme ilkeleri oluşturma hakkında daha fazla bilgi için bkz. Özel ilke tabanlı yetkilendirme.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, "EditPolicy");

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Kaynak tabanlı işleyici yazma

Kaynak tabanlı yetkilendirme için işleyici yazmak, düz gereksinimler işleyicisi yazmaktan çok farklı değildir. Özel bir gereksinim sınıfı oluşturun ve bir gereksinim işleyici sınıfı uygulayın. Gereksinim sınıfı oluşturma hakkında daha fazla bilgi için bkz . Gereksinimler.

İşleyici sınıfı hem gereksinimi hem de kaynak türünü belirtir. Örneğin, ve kaynağını kullanan SameAuthorRequirement bir Document işleyici aşağıdaki gibidir:

public class DocumentAuthorizationHandler : 
    AuthorizationHandler<SameAuthorRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   SameAuthorRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

public class SameAuthorRequirement : IAuthorizationRequirement { }

Yukarıdaki örnekte, bunun daha genel SpecificAuthorRequirement bir sınıfın özel bir durumu olduğunu SameAuthorRequirement düşünün. SpecificAuthorRequirement sınıfı (gösterilmez), yazarın adını temsil eden bir Name özellik içerir. Name özelliği geçerli kullanıcıya ayarlanabilir.

gereksinimini ve işleyicisini içinde Startup.ConfigureServiceskaydedin:

services.AddControllersWithViews();
services.AddRazorPages();

services.AddAuthorization(options =>
{
    options.AddPolicy("EditPolicy", policy =>
        policy.Requirements.Add(new SameAuthorRequirement()));
});

services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationHandler>();
services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationCrudHandler>();
services.AddScoped<IDocumentRepository, DocumentRepository>();

operasyonel gereksinimler

CRUD (Oluşturma, Okuma, Güncelleştirme, Silme) işlemlerinin sonuçlarına göre kararlar alırsanız yardımcı sınıfını OperationAuthorizationRequirement kullanın. Bu sınıf, her işlem türü için tek bir sınıf yerine tek bir işleyici yazmanızı sağlar. Bunu kullanmak için bazı işlem adları sağlayın:

public static class Operations
{
    public static OperationAuthorizationRequirement Create =
        new OperationAuthorizationRequirement { Name = nameof(Create) };
    public static OperationAuthorizationRequirement Read =
        new OperationAuthorizationRequirement { Name = nameof(Read) };
    public static OperationAuthorizationRequirement Update =
        new OperationAuthorizationRequirement { Name = nameof(Update) };
    public static OperationAuthorizationRequirement Delete =
        new OperationAuthorizationRequirement { Name = nameof(Delete) };
}

İşleyici, bir OperationAuthorizationRequirement gereksinim ve Document kaynak kullanılarak aşağıdaki gibi uygulanır:

public class DocumentAuthorizationCrudHandler :
    AuthorizationHandler<OperationAuthorizationRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   OperationAuthorizationRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author &&
            requirement.Name == Operations.Read.Name)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

Yukarıdaki işleyici, kaynağı, kullanıcının kimliğini ve gereksinimin Name özelliğini kullanarak işlemi doğrular.

İşletimsel kaynak işleyicisi ile sınama ve yasak

Bu bölümde, sınama ve yasak eylem sonuçlarının nasıl işlendiği ve sınama ile yasakların ne kadar farklı olduğu gösterilmektedir.

İşlemsel kaynak işleyicisini çağırmak AuthorizeAsync için, sayfa işleyicinizde veya eyleminizde çağrı yaparken işlemi belirtin. Aşağıdaki örnek, kimliği doğrulanmış kullanıcının sağlanan belgeyi görüntülemesine izin verilip verilmeyeceğini belirler.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, Operations.Read);

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Yetkilendirme başarılı olursa, belgeyi görüntüleme sayfası döndürülür. Yetkilendirme başarısız olursa ancak kullanıcının kimliği doğrulanırsa, geri dönmek ForbidResult herhangi bir kimlik doğrulama ara yazılımını yetkilendirmenin başarısız olduğunu bildirir. ChallengeResult Kimlik doğrulamasının gerçekleştirilmesi gerektiğinde bir döndürülür. Etkileşimli tarayıcı istemcileri için kullanıcıyı bir oturum açma sayfasına yönlendirmek uygun olabilir.

Yetkilendirme yaklaşımı kaynağa bağlıdır. Örneğin, belgeyi güncelleştirmek için yalnızca belgenin yazarı yetkilidir. Sonuç olarak, yetkilendirme değerlendirmesi gerçekleştirilmeden önce belgenin veri deposundan alınması gerekir.

Öznitelik değerlendirmesi, veri bağlamadan önce ve belgeyi yükleyen sayfa işleyicisi veya eylemi yürütülmeden önce gerçekleşir. Bu nedenlerden dolayı, bir [Authorize] öznitelikle bildirim temelli yetkilendirme yeterli değildir. Bunun yerine, kesinlik temelli yetkilendirme olarak bilinen bir stil olan özel yetkilendirme yöntemini çağırabilirsiniz.

Örnek kodu görüntüleme veya indirme (indirme).

Yetkilendirmeyle korunan kullanıcı verileriyle bir ASP.NET Core uygulaması oluşturma, kaynak tabanlı yetkilendirme kullanan örnek bir uygulama içerir.

Kesinlik temelli yetkilendirmeyi kullanma

Yetkilendirme bir IAuthorizationService hizmet olarak uygulanır ve sınıfındaki hizmet koleksiyonuna Startup kaydedilir. Hizmet, sayfa işleyicilerine veya eylemlerine bağımlılık ekleme yoluyla kullanılabilir hale getirilir.

public class DocumentController : Controller
{
    private readonly IAuthorizationService _authorizationService;
    private readonly IDocumentRepository _documentRepository;

    public DocumentController(IAuthorizationService authorizationService,
                              IDocumentRepository documentRepository)
    {
        _authorizationService = authorizationService;
        _documentRepository = documentRepository;
    }

IAuthorizationService iki AuthorizeAsync yöntem aşırı yüklemesine sahiptir: biri kaynağı, ilke adını, diğeri de kaynağı kabul eden ve değerlendirilecek gereksinimlerin listesi.

Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          IEnumerable<IAuthorizationRequirement> requirements);
Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user,
                          object resource,
                          string policyName);

Aşağıdaki örnekte, güvenliği sağlanacak kaynak özel Document bir nesneye yüklenir. AuthorizeAsync Geçerli kullanıcının sağlanan belgeyi düzenlemesine izin verilip verilmediğini belirlemek için bir aşırı yükleme çağrılır. Özel bir "EditPolicy" yetkilendirme ilkesi karara dahil edilir. Yetkilendirme ilkeleri oluşturma hakkında daha fazla bilgi için bkz. Özel ilke tabanlı yetkilendirme.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, "EditPolicy");

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Kaynak tabanlı işleyici yazma

Kaynak tabanlı yetkilendirme için işleyici yazmak, düz gereksinimler işleyicisi yazmaktan çok farklı değildir. Özel bir gereksinim sınıfı oluşturun ve bir gereksinim işleyici sınıfı uygulayın. Gereksinim sınıfı oluşturma hakkında daha fazla bilgi için bkz . Gereksinimler.

İşleyici sınıfı hem gereksinimi hem de kaynak türünü belirtir. Örneğin, ve kaynağını kullanan SameAuthorRequirement bir Document işleyici aşağıdaki gibidir:

public class DocumentAuthorizationHandler : 
    AuthorizationHandler<SameAuthorRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   SameAuthorRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

public class SameAuthorRequirement : IAuthorizationRequirement { }

Yukarıdaki örnekte, bunun daha genel SpecificAuthorRequirement bir sınıfın özel bir durumu olduğunu SameAuthorRequirement düşünün. SpecificAuthorRequirement sınıfı (gösterilmez), yazarın adını temsil eden bir Name özellik içerir. Name özelliği geçerli kullanıcıya ayarlanabilir.

gereksinimini ve işleyicisini içinde Startup.ConfigureServiceskaydedin:

services.AddMvc();

services.AddAuthorization(options =>
{
    options.AddPolicy("EditPolicy", policy =>
        policy.Requirements.Add(new SameAuthorRequirement()));
});

services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationHandler>();
services.AddSingleton<IAuthorizationHandler, DocumentAuthorizationCrudHandler>();
services.AddScoped<IDocumentRepository, DocumentRepository>();

operasyonel gereksinimler

CRUD (Oluşturma, Okuma, Güncelleştirme, Silme) işlemlerinin sonuçlarına göre kararlar alırsanız yardımcı sınıfını OperationAuthorizationRequirement kullanın. Bu sınıf, her işlem türü için tek bir sınıf yerine tek bir işleyici yazmanızı sağlar. Bunu kullanmak için bazı işlem adları sağlayın:

public static class Operations
{
    public static OperationAuthorizationRequirement Create =
        new OperationAuthorizationRequirement { Name = nameof(Create) };
    public static OperationAuthorizationRequirement Read =
        new OperationAuthorizationRequirement { Name = nameof(Read) };
    public static OperationAuthorizationRequirement Update =
        new OperationAuthorizationRequirement { Name = nameof(Update) };
    public static OperationAuthorizationRequirement Delete =
        new OperationAuthorizationRequirement { Name = nameof(Delete) };
}

İşleyici, bir OperationAuthorizationRequirement gereksinim ve Document kaynak kullanılarak aşağıdaki gibi uygulanır:

public class DocumentAuthorizationCrudHandler :
    AuthorizationHandler<OperationAuthorizationRequirement, Document>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   OperationAuthorizationRequirement requirement,
                                                   Document resource)
    {
        if (context.User.Identity?.Name == resource.Author &&
            requirement.Name == Operations.Read.Name)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

Yukarıdaki işleyici, kaynağı, kullanıcının kimliğini ve gereksinimin Name özelliğini kullanarak işlemi doğrular.

İşletimsel kaynak işleyicisi ile sınama ve yasak

Bu bölümde, sınama ve yasak eylem sonuçlarının nasıl işlendiği ve sınama ile yasakların ne kadar farklı olduğu gösterilmektedir.

İşlemsel kaynak işleyicisini çağırmak AuthorizeAsync için, sayfa işleyicinizde veya eyleminizde çağrı yaparken işlemi belirtin. Aşağıdaki örnek, kimliği doğrulanmış kullanıcının sağlanan belgeyi görüntülemesine izin verilip verilmeyeceğini belirler.

Not

Aşağıdaki kod örnekleri, kimlik doğrulamasının çalıştırıldığını ve özelliğini ayarlandığını User varsayar.

public async Task<IActionResult> OnGetAsync(Guid documentId)
{
    Document = _documentRepository.Find(documentId);

    if (Document == null)
    {
        return new NotFoundResult();
    }

    var authorizationResult = await _authorizationService
            .AuthorizeAsync(User, Document, Operations.Read);

    if (authorizationResult.Succeeded)
    {
        return Page();
    }
    else if (User.Identity.IsAuthenticated)
    {
        return new ForbidResult();
    }
    else
    {
        return new ChallengeResult();
    }
}

Yetkilendirme başarılı olursa, belgeyi görüntüleme sayfası döndürülür. Yetkilendirme başarısız olursa ancak kullanıcının kimliği doğrulanırsa, geri dönmek ForbidResult herhangi bir kimlik doğrulama ara yazılımını yetkilendirmenin başarısız olduğunu bildirir. ChallengeResult Kimlik doğrulamasının gerçekleştirilmesi gerektiğinde bir döndürülür. Etkileşimli tarayıcı istemcileri için kullanıcıyı bir oturum açma sayfasına yönlendirmek uygun olabilir.