C# Identity Server(OpenID Connect)混合流:需要用户使用刷新令牌保持登录5年
我正在使用Identity Server 3 OpenID Connect创建一个具有长期访问权限的混合客户端(允许用户登录5年而无需输入凭据) 我定义了一个内存配置存储客户端,如下所示:C# Identity Server(OpenID Connect)混合流:需要用户使用刷新令牌保持登录5年,c#,.net,openid,identityserver3,C#,.net,Openid,Identityserver3,我正在使用Identity Server 3 OpenID Connect创建一个具有长期访问权限的混合客户端(允许用户登录5年而无需输入凭据) 我定义了一个内存配置存储客户端,如下所示: new Client { Enabled = true, ClientId = MyClientApp.Id, ClientUri = MyClientApp.Uri, ClientName = MyClientApp.Name, Flow = Flows.Hybrid
new Client
{
Enabled = true,
ClientId = MyClientApp.Id,
ClientUri = MyClientApp.Uri,
ClientName = MyClientApp.Name,
Flow = Flows.Hybrid,
AllowAccessToAllScopes = true,
IdentityTokenLifetime = 300,
AccessTokenLifetime = 3600,
RefreshTokenExpiration = TokenExpiration.Absolute,
AbsoluteRefreshTokenLifetime = (int)TimeSpan.FromDays(1825).TotalSeconds,
RefreshTokenUsage = TokenUsage.OneTimeOnly,
UpdateAccessTokenClaimsOnRefresh = true,
RequireConsent = false,
RedirectUris = new List<string>
{
MyClientApp.Uri
},
PostLogoutRedirectUris = new List<string>
{
MyClientApp.Uri
},
ClientSecrets = new List<Secret>
{
new Secret(MyClientApp.Secret.Sha256())
}
},
访问令牌将在3600秒(1小时)后过期
标识令牌将在300秒(5分钟)后过期
刷新令牌(绝对)将在5年后过期
这是定义满足我要求的客户的正确方法吗
Requirements:
User Signs in (authenticates) one time
User will remain signed in without the session expiring in 5 years
User will need to enter their credentials again after 5 years
我非常感谢你的帮助
谢谢因此,仔细看一下,它似乎是IdentityServer 3的正确设置,可以获得您想要的结果 在IS4中,您将
AllowOfflineScope
并设置GrantType
——在IS3中,这是您设置的Flow
和allowaccesstoallscope
,生命期看起来很好——每小时应解析一次新的访问令牌,刷新令牌将执行5年
编辑:
在SPA中使用AngularJS的附加信息中,这改变了情况,在Angular of 4.3版本之前,似乎不支持刷新令牌,在4.3版本之后,您可以使用HttpInterceptor来利用刷新令牌
关于客户的流
,SPA只能使用隐式
类型
使用oidc令牌管理器和静默续订:
正如您提到的使用oidc令牌管理器
一个选项是使用静默续订
功能,并在IdentityServer中配置CookieOptions
的ExpireTimeSpan
——这允许单页应用基于客户端上的cookie静默续订会话——唯一的缺点是当然,如果客户端清除了cookie,则需要再次登录
本文的第3部分详细介绍了如何设置静默续订,需要做的只是延长cookie的生存期
将HttpInterceptor与刷新令牌一起使用:
AngularJS的4.3+版本中支持的HttpInterceptor是我没有实际使用经验的,尽管有很多关于使用它实现刷新令牌的指南。我假设您的“用户”不是人,相反,另一个应用程序或软件试图访问受保护的资源。@TejSoft我的用户是登录SPA AngularJS客户端的人,使用oidc-token-manager.js客户端从服务器请求令牌,我刚刚了解到刷新令牌对于基于SPA/js的应用程序(如AngularJS应用程序)可能不是一个好主意不知道为什么,基本上,我想和一个用户一起登录,显示一个永远在屏幕上更新的统计信息,我不想我的会话过期,我认为长寿命的引用令牌可能是一个更好的选择。我有一个angularjs客户端,它使用oidc-token-manager.js库从identity server请求令牌,问题是,由于某种原因,刷新令牌没有被返回。我确实指定了一个响应类型的代码id和脱机访问范围。我读到,刷新令牌对于基于SPA/JS的应用程序(如AngularJS应用程序)不是一个好主意。不知道为什么,基本上,我想和一个用户一起登录,显示一个在屏幕上永远更新的统计信息,因为我不想我的会话过期,我读到长寿命的引用令牌可能会更好option@EricBergman谢谢你的补充信息,我刚开始工作,但今天某个时候,一旦我完成工作,我可以尝试设置一个快速的AngularJS应用程序,并进一步测试它。我以前没有将IdentityServer与AngularJS应用程序一起使用过,因此我不能完全确定如果不进行一些测试,会出现什么问题。一旦我进行了更深入的测试,将添加更多细节:)@EricBergman关于两种可能的方法的额外细节(取决于您使用的AngularJS版本)-希望这有帮助:)
Requirements:
User Signs in (authenticates) one time
User will remain signed in without the session expiring in 5 years
User will need to enter their credentials again after 5 years