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.cs
kaydedin:
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 identityve 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.ConfigureServices
kaydedin:
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 identityve 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.ConfigureServices
kaydedin:
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 identityve 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.
ASP.NET Core