Параметры кэширования эталонного токена IdentityServer4 - PullRequest
0 голосов
/ 13 июня 2019

Я использую IdentityServer4 и хочу использовать его для моих микросервисов.
У меня сейчас два сервиса:
- AuthService
- сайт MVC
Я хочу использовать эталонный токен с коротким циклом времени жизни для частого запроса фактических утверждений от AuthService, но не могу найти свойство для установки времени жизни кэша.

Как я могу настроить время кэширования для утверждений, и это хорошая идея для получения фактических утверждений для пользователя?

Я попытался установить AccessTokenLifeTime, IdentityTokenLifeTime, TokenValidationParameters.ClockSkew, но это не работает для этой задачи.

MVC Запуск:

...
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
                {
                    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = "oidc";
                })
                .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.Authority = "https://localhost:5001";
                    options.ClientId = "client";
                    options.ClientSecret = "secret";
                    options.ResponseType = "code id_token";

                    options.RequireHttpsMetadata = false;

                    options.Scope.Add(IdentityServerConstants.StandardScopes.OpenId);
                    options.Scope.Add(IdentityServerConstants.StandardScopes.Profile);
                    options.Scope.Add("epp");
                    options.Scope.Add("roles");
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        NameClaimType = "name",
                        RoleClaimType = "role",
                        ClockSkew = TimeSpan.FromSeconds(10)
                    };
                });
...

Служба аутентификации, Config.cs:

...
new Client
                {
                    ClientId = "client",
                    ClientName = "Display name",
                    AllowedGrantTypes = new List<string>{GrantType.Hybrid},
                    ClientSecrets = new List<Secret>
                    {
                        new Secret("secret".Sha256())
                    },
                    RequireConsent = false,
                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                        "epp",
                        "roles",
                    },
                    RedirectUris = new List<string>
                    {
                        "https://localhost:5003/signin-oidc"
                    },
                    PostLogoutRedirectUris = new List<string>{ "https://localhost:5003/signout-callback-oidc" },

                    AccessTokenType = AccessTokenType.Reference,
                    AlwaysIncludeUserClaimsInIdToken = true,
                    AlwaysSendClientClaims = true,
                    AllowAccessTokensViaBrowser = true,
                    AccessTokenLifetime = 10,
                    IdentityTokenLifetime = 10,
                    UpdateAccessTokenClaimsOnRefresh = true
                }

1 Ответ

0 голосов
/ 13 июня 2019

Нет слоя кэширования для заявок.Заявки вместе с ClaimsPrincipal перестраиваются при каждом запуске защищенной ([Authorize]) конечной точки.Это делается промежуточным ПО аутентификации.Обычно у вас была бы схема проверки подлинности с использованием cookie-файлов, позволяющая избежать повторного возврата к конечной точке UserInfo и, как правило, повторная проверка токена до истечения срока его действия или эффективного удаления cookie-проверки подлинности (с помощью выхода или других средств).

...