Как установить для параметра SameSite значение Нет или Не определено для OWIN OpenIdConnect.Nonce cook ie on. NET 4.7.2 - PullRequest
0 голосов
/ 31 января 2020

Я использую веб-приложение ASP. NET MVC (4.7.2). Внешняя проверка подлинности выполняется с помощью экземпляра Identity Server 4 с гибридным потоком.

При тестировании новой функции «отсутствующее значение по умолчанию для SameSite - LAX» Firefox он не отправил LAX OpenIdConnect.Nonce cook ie назад к моему MVC веб-приложению:

Изображение 1: все куки имеют Lax

All cookies have Lax

Изображение 2: Файлы cookie не предоставлены при POST до знак входа c

Missing nonce cookie in the callback from Identity Server

Я получаю ошибку:

OpenIdConnectProtocolValidationContext.Nonce был нулевым, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce не был нулевым. Одноразовый номер не может быть подтвержден. Если вам не нужно проверять одноразовый номер, установите OpenIdConnectProtocolValidator.RequireNonce в значение «false». Обратите внимание, что если 'nonce' найдено, оно будет оценено.

Я попытался сделать несколько вещей, чтобы все куки имели хотя бы параметр None или Unspecified, но этот OpenIdConnect.Nonce cook ie продолжает придерживаться LAX.

app.UseKentorOwinCookieSaver();

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies",
    CookieSameSite = SameSiteMode.None,
    CookieManager = new SameSiteCookieManager(new SystemWebCookieManager())
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    Authority = configDetails.IdentityProviderUrl,
    AuthenticationType = "Cookies",
    ClientId = configDetails.ClientId,
    Scope = configDetails.Scope,
    ResponseType = "id_token code",
    RedirectUri = !string.IsNullOrWhiteSpace(configDetails.RedirectUri) ? configDetails.RedirectUri : "~/",
    SignInAsAuthenticationType = "Cookies",
    UseTokenLifetime = false,
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        AuthorizationCodeReceived = AuthorizationCodeReceived,
        RedirectToIdentityProvider = n =>
        {
            if (n.ProtocolMessage.RequestType != Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectRequestType.Logout) return Task.FromResult(0);

            var idTokenHint = n.OwinContext.Authentication.User.FindFirst("id_token");
            if (idTokenHint != null)
            {
                n.ProtocolMessage.IdTokenHint = idTokenHint.Value;
            }
            return Task.FromResult(0);
        }
    },
    CookieManager = new SameSiteCookieManager(new SystemWebCookieManager()),
});

В моем файле web.config я добавил:

<system.web>
  <httpCookies sameSite="None" requireSSL="true" />
</system.web>

Я использую SameSiteCookieManager из Microsoft MSDN .

Я надеюсь, что кто-то может помочь мне установить этот параметр OpenIdConnect.Nonce cook ie в значение None или Unspecified.

Заранее большое спасибо!

...