Из документации :
Интерактивные клиенты должны использовать поток на основе кода авторизации. Для защиты от подстановки кода следует использовать либо гибридный поток, либо PKCE.
Таким образом, сочетание PKCE и гибридного потока не является необходимым и, вероятно, бесполезным.
ЕслиPKCE доступен, это более простое решение проблемы.
PKCE уже является официальной рекомендацией для собственных приложений и SPA - и с выпуском ASP.NET Core 3 также по умолчанию поддерживается в обработчике OpenID Connectа также.
Таким образом, вместо использования гибридного потока, настройте его как интерактивный клиент ASP.NET Core MVC .
new Client
{
ClientId = "mvc",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Code,
RequireConsent = false,
RequirePkce = true,
// where to redirect to after login
RedirectUris = { "http://localhost:5002/signin-oidc" },
// where to redirect to after logout
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}
Где клиент mvcимеет ожидаемую конфигурацию:
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
});
Я также могу порекомендовать этот пост от Brock Allen. Это может ответить на ваш вопрос о куки. Вы также можете проверить сообщение Доминика Байера.
Для получения информации о том, как использовать токен обновления, прочитайте мой ответ здесь .