Смешивание удостоверений ASP.net и аутентификации Azure AD - PullRequest
1 голос
/ 08 октября 2019

В настоящее время мы используем ASP.Net Identity для нашего входа в систему на основе БД, и нам необходимо добавить поддержку единого входа Azure AD.

Я ценю, что после входа в систему мне нужно будет связать пользователя единого входа с пользователем в нашей системе. назначить соответствующие утверждения и роли, но я изо всех сил пытаюсь заставить 2 метода аутентификации работать бок о бок, и app.UseCookieAuthentication лежит в основе моих проблем.

В настоящее время мы имеем:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Login/Index"),
            ReturnUrlParameter = "url",
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, IdentityUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            },
            ExpireTimeSpan = TimeSpan.FromMinutes(double.Parse(ConfigurationManager.AppSettings["AuthenticationTimeout"])),
            SlidingExpiration = true
        });

С учетом этого я подозреваю, что файл cookie, возвращенный SSO, не обрабатывается должным образом, так как Request.IsAuthenticated всегда имеет значение false.

Если я изменю его на:

app.UseCookieAuthentication(new CookieAuthenticationOptions());

Затем SSO работает и возвращает мне аутентифицированный запрос, но, очевидно, нарушает логин Identity.

Для информации моя установка OpenId выглядит следующим образом, на данный момент я просто пытаюсь настроить его на работу с нашей рабочей AD, но в конечном итоге потребуется расширить его до мультитенанта:

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                RedirectUri = redirectUri,
                PostLogoutRedirectUri = redirectUri,
                Scope = OpenIdConnectScope.OpenIdProfile,
                ResponseType = OpenIdConnectResponseType.IdToken,
                TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer = false
                },
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = OnAuthenticationFailed
                }
            }
        );

Любая помощь илиуказатели оценены.

...