Я использую веб-приложение ASP. NET MVC (4.7.2). Внешняя проверка подлинности выполняется с помощью экземпляра Identity Server 4 с гибридным потоком.
При тестировании новой функции «отсутствующее значение по умолчанию для SameSite - LAX» Firefox он не отправил LAX OpenIdConnect.Nonce cook ie назад к моему MVC веб-приложению:
Изображение 1: все куки имеют Lax
Изображение 2: Файлы cookie не предоставлены при POST до знак входа c
Я получаю ошибку:
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.
Заранее большое спасибо!