从Azure AD删除后,用户保持登录状态

时间:2019-11-13 08:44:42

标签: azure-active-directory msal asp.net-core-3.0 microsoft-identity-platform

我已经使用https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-WebApp-OIDC

中的Microsoft.Identity.Web建立了一个小型的ASP.NET Core v3 Webapp。

这很好。但是,当我以userA身份登录,然后从我们的Azure AD中删除该用户时,该用户保持登录状态。 如何伪造我的应用以定期检查用户是否仍然存在或角色是否已更改?

Cookie not expiring for Azure AD auth开始,我了解可以设置OpenIdConnectOptions.UseTokenLifetime = falseCookieAuthenticationOptions.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();
        }

我应该只添加OpenIdConnectOptionsCookieAuthenticationOptions吗?

更新:提琴手的回应
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 个答案:

答案 0 :(得分:0)

添加

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

在您对AddMicrosoftIdentityPlatform的启动调用之后,强制cookie使用id_token生存期(1h)。如果删除或禁用了用户,则请求新令牌将失败。该请求将在最后一个请求的1小时内发出。我不会将Cookie的生存期更改为1分钟-会导致频繁的重新身份验证请求,这会减慢您的应用程序的运行速度,并增加您的$$$(如果使用B2C),并且可能会导致DOS完全被拒绝。

答案 1 :(得分:0)

这不是对我的问题的真正答案,但在我们的情况下有效。

我们在Google G Suite中拥有我们的用户,当我们可以在新的Web应用程序中实现MS Identity Platform时,我们将Google G Suite配置为使用AAD来产生一个用户群。 因为事实证明,集成MS-IP非常困难并且具有很多讨厌的副作用(例如更改其他基于MS-IP的Web应用程序的登录名),所以我们决定采用另一种方法。

我们将用户保留在Google G Suite中,并使用以下出色的博客实现了Google身份验证:http://blazorhelpwebsite.com/Blog/tabid/61/EntryId/4356/Google-Authentication-in-Server-Side-Blazor.aspx

现在,我们在几个小时内就能满足需求。 1个用户群,登录后在页眉中显示名称和个人资料图片。