C# 如何保持与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

在这里,我试图用identity server 4实现“保持登录”功能,这样,如果用户不注销,它将保持无限的登录时间,但我不能。我曾尝试使用客户端设置来无限延长令牌生存时间(一个很大的数字),但它不起作用。你这样做了吗

这是否可以通过设置以下值的任意组合来实现

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);