0

我将访问几个表以确定用户是否“已验证”,并将自定义角色添加到 Windows 身份验证用户以进行授权。现在我正在一个基本的 .net Core Web 应用程序中运行测试,只是为了看看我应该如何做。我在我的 Fallback Policy 和 ClaimsLoader 中设置了RequiredClaim,效果很好:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        services.AddTransient<IClaimsTransformation, ClaimsLoader>();
        services.AddAuthentication(IISDefaults.AuthenticationScheme);

        services.AddAuthorization(options =>
        {
            options.FallbackPolicy = new AuthorizationPolicyBuilder()
                .RequireClaim("ValidatedUser")
                .Build();
        });
    }


    public class ClaimsLoader : IClaimsTransformation
    {
       public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
       {
          var claimsIdentity = (ClaimsIdentity)principal.Identity;
          claimsIdentity.AddClaim(new Claim("ValidatedUser", ""));
          return await Task.FromResult(principal);
       }
    }

只要 AddClaim 行在那里,他们就可以访问该应用程序,没有它,他们会得到我想要的未经授权的响应。

根据我所阅读的内容,我认为我在转换中添加的任何声明/角色应该每次都回来,但他们没有。在上面的代码中,我每次都运行 AddClaim,因此它可以正常工作,但实际上我将去数据库以确定是否应该添加该声明,这是一个昂贵的过程。我想在多个请求中保留结果。因此,我想检查索赔是否已经存在,如果是,则不再打扰。无论出于何种原因,当它返回第二个请求时,它永远不会出现。

从我在 2.x 中读到的内容来看,声明应该持续存在: https ://philipm.at/2018/aspnetcore_claims_with_windowsauthentication.html

但在我的 3.1 应用程序中,它们没有。

4

0 回答 0