В настоящее время мы используем 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
}
}
);
Любая помощь илиуказатели оценены.