Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Identity Server(OpenID Connect)混合流:需要用户使用刷新令牌保持登录5年_C#_.net_Openid_Identityserver3 - Fatal编程技术网

C# Identity Server(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

我正在使用Identity Server 3 OpenID Connect创建一个具有长期访问权限的混合客户端(允许用户登录5年而无需输入凭据)

我定义了一个内存配置存储客户端,如下所示:

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