我使用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
}
答案 0 :(得分:0)
没有用于声明的缓存层。每当运行受保护的(ClaimsPrincipal
)端点时,都会重新构建声明和[Authorize]
。这是由身份验证中间件完成的。通常,您将具有cookie身份验证方案,该方案允许您避免每次都返回到UserInfo端点,并且通常避免令牌的重新验证,直到令牌过期或有效cookie(通过注销或其他方式)删除为止。>