Пользователь остается в системе после удаления из Azure AD

Я установил небольшое веб-приложение ASP.NET Core v3 с помощью Microsoft.Identity.Web из https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC

Это прекрасно работает. Но когда я вхожу в систему как userA, а затем удаляю этого пользователя из нашей Azure AD, пользователь остается в системе. Как я могу заставить свое приложение регулярно проверять, существует ли пользователь по-прежнему или его роли изменились?

От Cookie не истекающий для Azure AD AUTH я понимаю, что могу установитьOpenIdConnectOptions.UseTokenLifetime = false а также CookieAuthenticationOptions.ExpireTimeSpan. Но у меня нет этих вариантов, потому что (я думаю) этим занимается Microsoft.Identity.Web.

Это мой startup.cs:

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddMicrosoftIdentityPlatformAuthentication(Configuration);
           // Start update
            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.UseTokenLifetime = true;
            });

            services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options =>
            {
                options.ExpireTimeSpan = TimeSpan.FromMinutes(10);
                options.SlidingExpiration = false;
            });
           // End update

            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            });
           services.AddRazorPages();
        }

Мне просто добавить OpenIdConnectOptions а также CookieAuthenticationOptions?

Обновление: ответ Fiddler
https://localhost:44321/AzureAD/Account/SignIn:

Response sent 393 bytes of Cookie data:
Set-Cookie: .AspNetCore.OpenIdConnect.Nonce.CfDJ8DuK51tOHitCik75v2S8iWxKHxTWbTuVHpn..tFRI_4=N; expires=Mon, 18 Nov 2019 15:46:01 GMT; path=/signin-oidc; secure; httponly
Response sent 159 bytes of Cookie data:
Set-Cookie: .AspNetCore.Correlation.AzureADOpenID.391z3h71jwDryPN3B-AdSG0heYONqHJl1CVSVXQTEvA=N; expires=Mon, 18 Nov 2019 15:46:01 GMT; path=/signin-oidc; secure; httponly

https://login.microsoftonline.com/4723a546-001...:

Response sent 1012 bytes of Cookie data:
    Set-Cookie: ESTSAUTHPERSISTENT=AQABAAQAAACQN9QBRU3jT6bcBQLZNUj7uwP...mnvoIAAgAEAA8AEAAA; domain=.login.microsoftonline.com; expires=Sun, 16-Feb-2020 15:31:00 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 344 bytes of Cookie data:
    Set-Cookie: ESTSAUTH=AQABAAQAAACQN9QBRU3jT6bcBQLZNUj7wC-ZyhIlRLoQ...AAIABAACAAAAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None

Response sent 46 bytes of Cookie data:
    Set-Cookie: ESTSAUTHLIGHT=+; path=/; secure; SameSite=None

Response sent 151 bytes of Cookie data:
    Set-Cookie: ch=5skAXHVPUQU3cW85sv9gWKffR4iIPEUy-ft0Wus--nw; domain=.login.microsoftonline.com; expires=Sun, 16-Feb-2020 15:31:00 GMT; path=/; secure; SameSite=None

Response sent 50 bytes of Cookie data:
    Set-Cookie: ESTSSC=00; path=/; secure; HttpOnly; SameSite=None

Response sent 291 bytes of Cookie data:
    Set-Cookie: buid=AQABAAEAAACQN9QBRU3jT6bcBQLZNUj7TWvsgdEJ-MOKclE...UnPupXv2kGSxsgAA; expires=Wed, 18-Dec-2019 15:31:00 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 1831 bytes of Cookie data:
    Set-Cookie: CCState=Q2xJS1FHZGxaWEowYUdWa1pHVkFjM1ZpWVdSMmFXVnpM...reFV1VkFBRT0=; domain=.login.microsoftonline.com; expires=Thu, 28-Nov-2019 15:31:00 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 171 bytes of Cookie data:
    Set-Cookie: fpc=AoAEjBaP4a5AlJE4o0Jin2Ps2YtHAQAAAOmvZNUOAAAAg2kmAwIAAAC8r2TVDgAAADvINqwBAAAA2K9k1Q4AAAA; expires=Wed, 18-Dec-2019 15:31:00 GMT; path=/; secure; HttpOnly; SameSite=None

https://login.microsoftonline.com/4723a546-001../login HTTP / 1.1:

Response sent 1012 bytes of Cookie data:
    Set-Cookie: ESTSAUTHPERSISTENT=AQABAAQAAACQN9QBRU3jT6bcBQLZNUj...IAAgAEAA8AEAAA; domain=.login.microsoftonline.com; expires=Sun, 16-Feb-2020 15:31:18 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 728 bytes of Cookie data:
    Set-Cookie: ESTSAUTH=AQABAAQAAACQN9QBRU3jT6bcBQLZNUj77qVSa5EFK...BAAEABAAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None

Response sent 82 bytes of Cookie data:
    Set-Cookie: ESTSAUTHLIGHT=+d4f06d0f-8cba-42f7-81cd-a996d96fcbce; path=/; secure; SameSite=None

Response sent 151 bytes of Cookie data:
    Set-Cookie: ch=o3kjZd2rB2j31dip8OtCMqqwRWCB2vyRziEz796WfUE; domain=.login.microsoftonline.com; expires=Sun, 16-Feb-2020 15:31:18 GMT; path=/; secure; SameSite=None

Response sent 50 bytes of Cookie data:
    Set-Cookie: ESTSSC=00; path=/; secure; HttpOnly; SameSite=None

Response sent 291 bytes of Cookie data:
    Set-Cookie: buid=AQABAAEAAACQN9QBRU3jT6bcBQLZNUj7jiDQCSTiR0kg-...V2qP5AgAA; expires=Wed, 18-Dec-2019 15:31:18 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 1831 bytes of Cookie data:
    Set-Cookie: CCState=Q2xJS1FHZGxaWEowYUdWa1pHVkFjM1ZpWVdSMmFXVn...NiOEFBRT0=; domain=.login.microsoftonline.com; expires=Thu, 28-Nov-2019 15:31:18 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 171 bytes of Cookie data:
    Set-Cookie: fpc=AoAEjBaP4a5AlJE4o0Jin2Ps2YtHAQAAAOmvZNUOAAAAg2...AA; expires=Wed, 18-Dec-2019 15:31:18 GMT; path=/; secure; HttpOnly; SameSite=None

Response sent 66 bytes of Cookie data:
    Set-Cookie: x-ms-gateway-slice=estsfd; path=/; SameSite=None; secure; HttpOnly

Response sent 47 bytes of Cookie data:
    Set-Cookie: stsservicecookie=ests; path=/; secure; HttpOnly

Обновление 2:
изменения в моем Startup.cs, похоже, теперь работают. Я вхожу в систему как UserC, а затем удаляю этого пользователя из AAD. Через час, когда я меняю страницы, мне нужно снова войти в систему. Что, конечно, не удается. Час немного странный, потому что я установилExpireTimeSpanдо 10 мин. Но я уже рад, что пользователя проверили.
Одно примечание: когда я перезапускаю свое приложение, оно перенаправляется прямо на login.live.com и запрашивает у меня пароль, но я не могу изменить имя пользователя!
В URL-адресе я вижу имя пользователя в качестве параметра, когда я его удаляю, он запрашивает имя пользователя. Но когда я использую другую учетную запись, он продолжает говорить, что мой пароль неверен. Скорее всего, потому что он использует мою личную версию, а не мою рабочую версию. Я не могу это изменить, поэтому больше не могу войти в собственное приложение.
Еще один огромный недостаток заключается в том, что я также вошел на портал Azure со своей учетной записью администратора. На следующее утро после перезагрузки ноутбука, повторного открытия Chrome и восстановления вкладок, включая вкладку для портала Azure, я вошел в систему как пользователь, которого я использовал в своем приложении. Зачем?? И когда этот пользователь будет удален, я больше не могу войти на портал Azure. Скорее всего, потому что он использует мою личную версию вместо моей бизнес-версии.
Я не уверен, стоит ли мне продолжать использовать платформу Microsoft Identity Platform для моего нового приложения. Пока для меня недостатков больше, чем преимуществ.

2 ответа

Решение

Это не настоящий ответ на мою проблему, но в нашем случае он работает.

У нас есть пользователи в Google G Suite, и когда мы сможем внедрить платформу MS Identity Platform в наше новое веб-приложение, мы настроим Google G Suite для использования нашего AAD, что приведет к созданию одной пользовательской базы. Поскольку интеграция MS-IP оказалась очень сложной и имеет множество неприятных побочных эффектов (например, изменение логинов других веб-приложений на базе MS-IP), мы решили пойти другим путем.

Мы сохраняем наших пользователей в Google G Suite и внедрили аутентификацию Google с помощью этого замечательного блога: http://blazorhelpwebsite.com/Blog/tabid/61/EntryId/4356/Google-Authentication-in-Server-Side-Blazor.aspx

Теперь в течение нескольких часов у нас есть то, что нам нужно. 1 база пользователей и после входа в систему отображается имя и изображение профиля в шапке.

Добавлять

            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
        {
            options.UseTokenLifetime = true;

После запуска вызовите AddMicrosoftIdentityPlatform, чтобы файлы cookie использовали время жизни id_token (1h). Если пользователь удален или отключен, запрос нового токена завершится ошибкой. Этот запрос будет отправлен в течение 1 часа после последнего. Я бы не стал менять время жизни cookie на 1 минуту - это привело бы к частым запросам на повторную аутентификацию, что замедлило бы работу вашего приложения, стоило вам $$$ (при использовании B2C) и могло бы привести к отказу DOS в целом.