IdentityServer4 - Обновить токены Hybrid Flow - Файлы cookie и хранилище - PullRequest
0 голосов
/ 17 октября 2019

Я следовал за Quickstart Hybrid Flow здесь , но мне нужна помощь и советы по сохранению токенов после использования токена обновления.

Если я говорю true, опция SaveTokens позволяет сохранять токены в файлах cookie.

Во-первых, целесообразно ли сохранять и обновлять токены доступа в файлах cookie (проблемы безопасности)?

Другой вопрос, я правильно получаю токен обновления с помощью кода var refreshToken = await HttpContext.GetTokenAsync("refresh_token");, но теперь, когда я получаю новый токен доступа, как я могу его сохранить (без SetTokenAsync метода)? ... потому что без этогоЯ получаю старый токен доступа, когда звоню var refreshToken = await HttpContext.GetTokenAsync("access_token");, тогда как хочу получить новый.

Спасибо

1 Ответ

2 голосов
/ 18 октября 2019

Из документации :

Интерактивные клиенты должны использовать поток на основе кода авторизации. Для защиты от подстановки кода следует использовать либо гибридный поток, либо 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. Это может ответить на ваш вопрос о куки. Вы также можете проверить сообщение Доминика Байера.

Для получения информации о том, как использовать токен обновления, прочитайте мой ответ здесь .

...