Когда Azure AD и обмен сообщениями с сервера идентификации на куки недоступны? - PullRequest
1 голос
/ 19 марта 2020

У меня настроена IS4, работающая в качестве федеративного шлюза до Azure AD. Все работало нормально, пока что-то не произошло, и я больше не получаю куки от Azure AD. Сервер настроен следующим образом:

 IdentityModelEventSource.ShowPII = true; //Add this line

        services.AddIdentityServer(options =>
         {
             options.Events.RaiseErrorEvents = true;
             options.Events.RaiseFailureEvents = true;
             options.Events.RaiseInformationEvents = true;
             options.Events.RaiseSuccessEvents = true;
             options.PublicOrigin = settings.PublicOrigin;
             options.Authentication = new AuthenticationOptions()
             {
                 CookieLifetime = TimeSpan.FromHours(1), // ID server cookie timeout set to 10 hours
                 CookieSlidingExpiration = true
                 ,
             };
         })
            .AddInMemoryApiResources(Config.GetApis())
            .AddInMemoryIdentityResources(Config.GetIdentityResources())
            .AddInMemoryClients(Config.GetClients())
            .AddDeveloperSigningCredential(persistKey: false)
            .AddCustomUserStore()
            .AddProfileService<ProfileService>();

        services
            .AddAuthentication(options =>
            {
            })
            .AddOpenIdConnect("aad", "Sign-in with Azure AD", options => Configuration.Bind("AzureAd", options))
            .AddCookie()
            .AddLocalApi(options => options.ExpectedScope = "api");

        services.Configure<OpenIdConnectOptions>("aad", options =>
                    {
                        options.Scope.Add("openid");
                        options.Scope.Add("profile");
                        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                        options.SignOutScheme = IdentityServerConstants.SignoutScheme;
                        options.ResponseType = "id_token";

                    });

        // preserve OIDC state in cache (solves problems with AAD and URL lenghts)
        services.AddOidcStateDataFormatterCache("aad");

Клиент выглядит следующим образом:

new Client
            {
                ClientId = "implicit",
                ClientName = "Implicit Client",
                AllowAccessTokensViaBrowser = true,
                RequireConsent = false,

                RedirectUris = { "https://notused" },
                PostLogoutRedirectUris = { "https://notused" },

                AccessTokenType = AccessTokenType.Jwt,
                AccessTokenLifetime = 3600,
                AllowedGrantTypes = GrantTypes.Implicit,
                EnableLocalLogin=false,
                AllowedScopes = {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.Email,
                    "api"},
            },

Я получил образцы из Quickstarts и адаптировал их для своих нужд. Все работало нормально, пока не заработало.

Здесь происходит сбой:

result = await HttpContext.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);

Поскольку он не находит куки в контексте. Как я могу устранить эту проблему? И когда (при каких условиях) Cookies обычно не присутствуют в контексте? (Учитывая, что они должны быть) Я не использую As pNet Идентичность. Я хочу только внешний вход.

...