C# 如何保持与identity server 4的登录?
在这里,我试图用identity server 4实现“保持登录”功能,这样,如果用户不注销,它将保持无限的登录时间,但我不能。我曾尝试使用客户端设置来无限延长令牌生存时间(一个很大的数字),但它不起作用。你这样做了吗 这是否可以通过设置以下值的任意组合来实现C# 如何保持与identity server 4的登录?,c#,identityserver4,openid-connect,C#,Identityserver4,Openid Connect,在这里,我试图用identity server 4实现“保持登录”功能,这样,如果用户不注销,它将保持无限的登录时间,但我不能。我曾尝试使用客户端设置来无限延长令牌生存时间(一个很大的数字),但它不起作用。你这样做了吗 这是否可以通过设置以下值的任意组合来实现 AuthorizationCodeLifetime = 5, IdentityTokenLifetime = 5, AccessTokenLifetime = 5, AllowOfflineAccess
AuthorizationCodeLifetime = 5,
IdentityTokenLifetime = 5,
AccessTokenLifetime = 5,
AllowOfflineAccess = true,
AbsoluteRefreshTokenLifetime = 5,
RefreshTokenUsage = TokenUsage.ReUse,
RefreshTokenExpiration = TokenExpiration.Absolute,
UpdateAccessTokenClaimsOnRefresh = true,
SlidingRefreshTokenLifetime = 5,
AllowRememberConsent = false
有什么不同的方法来实现这些功能吗
这是完整的客户端配置:
new Client
{
ClientId = "uilocal",
ClientName = "UI development",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
RequireConsent = false,
RedirectUris = {"http://localhost:5004/index.html"},
PostLogoutRedirectUris =
{"http://localhost:5004/index.html"},
AllowedCorsOrigins = {"http://localhost:5004"},
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.OfflineAccess,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"api1",
"mvc5",
"jsreport"
};
AuthorizationCodeLifetime = 5,
IdentityTokenLifetime = 5,
AccessTokenLifetime = 5,
AllowOfflineAccess = true,
AbsoluteRefreshTokenLifetime = 5,
RefreshTokenUsage = TokenUsage.ReUse,
RefreshTokenExpiration = TokenExpiration.Absolute,
UpdateAccessTokenClaimsOnRefresh = true,
SlidingRefreshTokenLifetime = 5,
AllowRememberConsent = false
}
这里要提到的是,我使用的是angular应用程序中的隐式API,通过传递带有请求头的访问令牌来使用API
在此方面的任何帮助都将提前感谢。谢谢。似乎不清楚代币应该如何使用 在登录请求时,访问令牌和刷新令牌(在令牌请求中包括
offline\u访问
范围)。在混合、授权代码和资源所有者密码流中提供
访问令牌应该是短期的(例如五分钟、一小时),而刷新令牌应该是长期的。例如,30天
为什么??因为访问令牌在被拦截时很难撤销。它是一个自包含的包,不能更改(另一种方法可以是引用令牌)。因此,出于安全考虑,它应该是短期的。这使得“黑客”的吸引力降低
这就是为什么刷新令牌应该是长寿命的,您需要它来请求新的访问令牌。问题是刷新令牌永远不应该被截获,因为它在到期之前提供无限的访问权限。因此,客户必须能够“保守秘密”。然而,撤销刷新令牌更容易。您还可以在每次请求访问令牌时“更新”刷新令牌
刷新令牌仅用于请求新的访问令牌。您可以随时请求新令牌,即使当前访问令牌尚未过期。但更可能的情况是,当访问令牌即将过期或确实过期时,您将请求一个新令牌
您可以将刷新令牌发送到IdentityServer,而无需麻烦用户输入凭据
依此类推,直到刷新令牌本身过期。在这种情况下,您将强制用户至少每30天登录一次。但是如果你不想这样做,你也可以选择使用滑动过期。可能的重复是我的“重新授权”问题的重复,因为当用户返回你的站点时,重新授权是你必须自己处理的事情(在你处理之前,他们是匿名的)。我认为问题与重新验证或增加现有令牌(可能是身份令牌、访问令牌或刷新令牌)的生存时间有关。我正在使用访问令牌从oidc客户端调用API,但在过期之后,令牌在identity server中不起作用。可能是声明过期后未被识别的用户。您确定IsPersistent实际设置在正确的位置吗?您没有设置AuthenticationProperties.ExpiresUtc?idsrv cookie是否实际设置了未来的过期日期?@Leon我在上面的代码等链接中找到了,我现在正在以自定义方式执行,设置15天令牌提升时间和veryfying将持久存储在数据库中。@Ruard感谢您详细的回答。我理解你的解释,问题是我们使用的隐式流不支持令牌刷新。@UtpalKumarDas检查这里的评论:这看起来很像McGuireV10链接中的答案,你同意吗?@Ruard再次感谢,似乎有一种方法可以使用“隐藏iframe”,有没有以这种方式实现的示例?
AuthenticationProperties properties = null;
if (loginInputModel.RememberLogin)
{
properties = new AuthenticationProperties
{
IsPersistent = true
};
}
HttpContext.Authentication.SignInAsync(user.Id, user.UserName, properties);