【问题标题】:Having issues with claimsprincipal in .net core 2.2.net core 2.2 中的 claimprincipal 存在问题
【发布时间】:2019-02-08 18:12:32
【问题描述】:

我一直在尝试制作一个类似于我在 .net 4.5 中的核心系统,但没有成功。我仍在尝试完全掌握核心,但认为关键项目仍然存在。我的最终目标是让一个主体返回自定义声明,并让它在整个会话或内存中持续大约 15 分钟,然后再重新检查。这是我似乎无法克服的问题,并且在互联网上搜索没有成功。

  1. claimtransform 每次我执行操作时都会运行,但不确定是否有办法将其移至会话级事件(如果存在)。
  2. 我的 ClaimsPrincipal 只为我提供了 AD 组的 sid 而不是名称,我还没有找到查询 AD 的方法,因为 Novell 选项不起作用我使用的是 Windows 身份验证并且无法访问密码用户正在使用那里的广告帐户登录。
  3. 过去,我在 .net 的 Global.ascx 中实例化 FederatedAuthentication 时使用了 ClaimsAuthenticationManager/ClaimsAuthorizationManager 的扩展类,但似乎无法将其转换为核心。

我当前的代码示例:

    public class ClaimsTransformer : IClaimsTransformation
    {
        public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
        {
            ClaimsIdentity cidentity = (ClaimsIdentity)principal.Identity;
            //IQueryable<Claim> claims = cidentity.Claims.AsQueryable();
            List<Claim> claims = new List<Claim>();

            cidentity.AddClaim(new Claim("TestClaimAdd", "Test Worked"));
            cidentity.AddClaim(new Claim(ApplicationClaimTypes.UserID, Guid.NewGuid().ToString()));
            cidentity.AddClaim(new Claim(ClaimTypes.Name, principal.Identity.Name));

            claims.AddRange(cidentity.Claims);

            //foreach (var claim in claims)
            //{
            //    var name = claim.Subject.Name;
            //}

            //cidentity.AddClaim(new Claim("TestClaimAdd","Test Worked"));

            var identity = new ClaimsIdentity(claims, "TEST", ClaimTypes.Name, ApplicationClaimTypes.ApplicationRole);

            var myPrincipal = new ApplicationClaimsPrincipal(identity);

            //principal.AddIdentity(identity);

            return Task.FromResult((ClaimsPrincipal)myPrincipal);
        }
    }

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddAuthentication(IISDefaults.AuthenticationScheme);
        services.AddScoped<IClaimsTransformation, ClaimsTransformer>();
    }

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    我“认为”您所追求的是 Net Core 应用程序中的 Windows 身份验证?作为框架的一部分,Microsoft 已经提供了一种标准方法:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.2&tabs=visual-studio

    【讨论】:

    • 我已经在我的应用程序中使用 Windows 身份验证。但我正在尝试添加特定于 Web 应用程序的自定义声明,这些声明不会出现在 AD 中。这背后的目的是添加我可以在网站上用于授权的项目。我在 .net 框架中实例化联邦的原因是,一旦它使用经过身份验证的用户访问站点,我就可以向它添加我的自定义声明。我消耗了现有的,添加了我的,然后将其返回到线程和上下文。我觉得我想多了,因为我知道核心框架和完整框架之间存在重大差异。
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2020-05-28
    • 2019-11-19
    • 2019-06-14
    • 1970-01-01
    • 2020-01-19
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多