Возникли проблемы с претензиями принципала в .net core 2.2 - PullRequest
0 голосов
/ 08 февраля 2019

Я пытался сделать систему, аналогичную той, которая была в ядре .net 4.5, безуспешно.Я все еще пытаюсь полностью понять ядро, но ключевые фигуры все еще будут там.Моя конечная цель - вернуть принципала с пользовательскими утверждениями и прослужить ему весь сеанс или память в течение 15 минут, прежде чем он будет перепроверен.Вот мои проблемы, которые я, кажется, не могу преодолеть, и поиск в Интернете безуспешен.

  1. Претензия запускается каждый раз, когда я выполняю действие, но не была уверена, был ли способпереместите это в событие уровня сеанса, если оно существует.
  2. Имеющийся у меня ClaimsPrincipal дает только sid для групп AD вместо имени, и я не нашел способа запросить AD для этого в качестве опции Novellне работает, я использую Windows Auth и не имею доступа к паролю, который пользователь использует для входа в свою учетную запись.
  3. В прошлом я использовал расширенные классы ClaimsAuthenticationManager / ClaimsAuthorizationManager при создании экземпляра FederatedAuthentication в Global.ascx в .net, но, похоже, не могу перевести это на ядро.

Пример моеготекущий код:

    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>();
    }

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 10 февраля 2019

Я "думаю", что вам нужно, это проверка подлинности Windows в приложении Net Core?Microsoft предоставляет стандартный способ сделать это уже в рамках фреймворка: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.2&tabs=visual-studio

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...