Я пытаюсь выполнить аутентификацию AD с помощью Blazor (Server-side и .net core 3.0 preview-6).
Когда я добавляю @attribute [Authorize(Roles = "DomainUsers")]
, я получаю ошибку ниже.
Я получаю ту же ошибку, если перехожу на Политику. Однако, если я использую только [Authorize]
, я не получаю сообщение об ошибке.
Это происходит, когда я нажимаю на ссылку в меню.
Если я напишу прямой путь в браузере, я буду работать как положено.
public Startup(IConfiguration config)
{
Configuration = config;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddNewtonsoftJson();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHttpContextAccessor();
services.AddAuthentication();
services.AddAuthorization();
services.AddHttpClient();
var appDB = Configuration.GetConnectionString("AppDB");
services.Configure<CtApiSettings>(Configuration.GetSection("CtApiSettings"));
services.AddDbContext<ApplicationContext>(o => o.UseSqlServer(appDB, builder =>
{
builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
}));
services.AddToaster(config =>
{
config.PositionClass = Defaults.Classes.Position.TopFullWidth;
config.PreventDuplicates = false;
config.NewestOnTop = false;
config.ShowTransitionDuration = 500;
config.VisibleStateDuration = 5000;
config.HideTransitionDuration = 500;
});
// Setup HttpClient for server side in a client side compatible fashion
services.AddScoped<HttpClient>(s =>
{
// Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it.
var uriHelper = s.GetRequiredService<IUriHelper>();
return new HttpClient
{
BaseAddress = new Uri(uriHelper.GetBaseUri())
};
});
ActiveDirectoryModel adm = new ActiveDirectoryModel();
Configuration.GetSection("AD").Bind(adm);
services.Configure<ActiveDirectoryModel>(Configuration.GetSection("AD"));
services.AddScoped<ExcelExportService>();
services.AddScoped<IAreaService, AreaService>();
services.AddScoped<IUserProvider>(x => new UserProvider(adm));
services.AddScoped<IAdminService, AdminService>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
//endpoints.MapRazorPages();
//endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
Ошибка: System.ObjectDisposedException: безопасный дескриптор закрыт.
Название объекта: «SafeHandle». в
System.Runtime.InteropServices.SafeHandle.DangerousAddRef (Boolean &
успех) в
System.StubHelpers.StubHelpers.SafeHandleAddRef (SafeHandle pHandle,
Логическое и успех) в
Interop.Advapi32.GetTokenInformation (SafeAccessTokenHandle
TokenHandle, UInt32 TokenInformationClass, SafeLocalAllocHandle
TokenInformation, UInt32 TokenInformationLength, UInt32 & ReturnLength)
в
System.Security.Principal.WindowsIdentity.GetTokenInformation (SafeAccessTokenHandle
tokenHandle, TokenInformationClass tokenInformationClass, Boolean
nullOnInvalidParam) в
System.Security.Principal.WindowsIdentity.get_User () в
System.Security.Principal.WindowsIdentity.b__51_0 () в
System.Security.Principal.WindowsIdentity. <> C__DisplayClass67_0.b__0 (Объект
) в
System.Threading.ExecutionContext.RunInternal (ExecutionContext
выполнениеContext, обратный вызов ContextCallback, состояние объекта)
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Threading.ExecutionContext.RunInternal (ExecutionContext
executeContext, обратный вызов ContextCallback, состояние объекта) в
System.Threading.ExecutionContext.Run (ExecutionContext
executeContext, обратный вызов ContextCallback, состояние объекта) в
System.Security.Principal.WindowsIdentity.RunImpersonatedInternal (SafeAccessTokenHandle
токен, действие действие) в
System.Security.Principal.WindowsIdentity.RunImpersonated (SafeAccessTokenHandle
safeAccessTokenHandle, действие Action) в
System.Security.Principal.WindowsIdentity.GetName () в
System.Security.Principal.WindowsIdentity.get_Name () в
System.Security.Principal.WindowsIdentity.InitializeClaims () в
System.Security.Principal.WindowsIdentity.get_Claims () + MoveNext ()
в System.Security.Claims.ClaimsIdentity.HasClaim (тип String, строка
значение) в System.Security.Claims.ClaimsPrincipal.IsInRole (String
роль) в System.Security.Principal.WindowsPrincipal.IsInRole (String
роль) в
Microsoft.AspNetCore.Authorization.Infrastructure.RolesAuthorizationRequirement. <> C__DisplayClass4_0.b__0 (String
r) в System.Linq.Enumerable.Any [TSource] (предикат IEnumerable 1 source,
Func
2) в
Microsoft.AspNetCore.Authorization.Infrastructure.RolesAuthorizationRequirement.HandleRequirementAsync (AuthorizationHandlerContext
контекст, требование RolesAuthorizationRequirement) в
Microsoft.AspNetCore.Authorization.AuthorizationHandler 1.HandleAsync(AuthorizationHandlerContext
context) at
Microsoft.AspNetCore.Authorization.Infrastructure.PassThroughAuthorizationHandler.HandleAsync(AuthorizationHandlerContext
context) at
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService.AuthorizeAsync(ClaimsPrincipal
user, Object resource, IEnumerable
1 требования) в
Microsoft.AspNetCore.Components.AuthorizeViewCore.IsAuthorizedAsync (ClaimsPrincipal
пользователь) в
Microsoft.AspNetCore.Components.AuthorizeViewCore.OnParametersSetAsync ()
в
Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion (Task
задача) в
Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync ()