为什么服务器端Blazor的<AuthorizeView>在重新渲染时未获得授权

问题描述

我正在尝试使用Windows身份验证作为概念证明来建立一个简单的Blazor项目,并且对Blazor的功能不了解,或者我误解了到目前为止所读的内容

我已经使用Windows身份验证创建了Blazor服务器项目,并且我试图根据在Active Directory中分配给用户用户组来限制内容

我发现自己面临的问题是我对AuthorizeView的理解使您可以根据角色和策略来限制访问。但是,应用首次加载AuthorizeView时会显示正确的“授权”内容,但在应用重新渲染并显示未授权内容后不到一秒钟。

这是我开始的“政策”设置。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddServerSideBlazor();

            services.AddAuthorization(config =>
            {
                config.AddPolicy("IsDeveloper",policy => policy.RequireRole("UserGroup_DEVELOPERS"));
                config.AddPolicy("IsDeveloperAdmin",policy => policy.RequireRole("UserGroup_DEVELOPERADMINS"));
            });

            services.AddSingleton<WeatherForecastService>();
        }

public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/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.MapBlazorHub();
                endpoints.MapFallbackToPage("/_Host");
            });
        }

这是修改后的Index.razor文件,用于显示内容

@page "/"
<h1>Hello,world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

<AuthorizeView Policy="IsDeveloperAdmin">
    <Authorized>
        <p>You can only see this if you are a developer admin!!!</p>
    </Authorized>
    <NotAuthorized>
        <p>You are not a dev admin</p>
    </NotAuthorized>
</AuthorizeView>
<AuthorizeView><p>Hello world</p></AuthorizeView>
<AuthorizeView Policy="IsDeveloper">
    <Authorized>
        <p>You can only see this if you are a developer!!!</p>
    </Authorized>
    <NotAuthorized>
        <p>You are not a dev</p>
    </NotAuthorized>
</AuthorizeView>

结果如下:

Slowed down to show the change from Authorised to non authorised

我浏览过Microsoft文档,因此,如果有人可以共享指向资源的链接,或者有帮助我理解的见解,我将不胜感激。

更新

这似乎是特定的计算机问题。上面的代码在另一台开发机器上工作。部署到IIS服务器时,它也可以工作。我已经将VS更新到最新版本,没有运气。

在Visual Studio(2019)Edge Chronium和Google Chrome中运行该应用程序时,两种浏览器均会在加载时执行授权,然后过一秒钟就会使授权失败。但是,在IE11中,该应用程序已按预期授权。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)