我有一个ASP。net core 3.1 MVC应用程序,使用OpenID连接Identity Server 4。我正在使用IdentityModel自动刷新应用程序中的访问令牌。配置如下所示:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.SlidingExpiration = false;
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("profile");
options.Scope.Add("api1");
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
options.SignedOutCallbackPath = "/oidc-signout";
options.SignedOutRedirectUri = "/goodbye";
});
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
services.AddHttpClient("api1", configure =>
{
configure.BaseAddress = new Uri("https://localhost:6001");
});
services.AddAccessTokenManagement();
我有一个控制器,它将从使用该标识服务器保护的下游应用编程接口中提取数据。我的MVC客户端请求范围api1和offline_access来获取刷新令牌。这些令牌存储在cookie中,因为服务上设置了SaveTokens=true
。
一切正常。当我登录时,我会获得访问令牌和刷新令牌。我让访问令牌持续大约20分钟,当它过期时,它使用刷新令牌调用令牌endpoint以获得新的访问令牌刷新令牌。
我不确定如何处理的一个场景是当我的刷新令牌生命周期已经过去的时候。如果我将刷新令牌生命周期设置为8小时,但我的MVC会话仍然处于活动状态,它将尝试获取新的刷新令牌并失败。
在OpenID connect中间件中,我是否可以处理一些事件来检测它何时无法获取该刷新令牌,我是否可以使用这些事件以某种方式再次强制登录(或至少往返身份服务器/授权endpoint)?
我发现的一个解决方案是将其连接到Cookies中间件中。以下是一般流程:
在每个请求中,使用Cookies中间件事件检查访问令牌。
如果快过期了,就申请一个新的。
替换ClaimSideEntity中的新访问和刷新令牌。
指示Cookies中间件续订会话Cookie,使其包含新令牌。
你可以参考这篇文章,它可能会对你有所帮助: OpenID Connect中ID令牌到期时间的意图是什么?
我使用jwt为用户在我的应用程序上执行操作提供授权。它工作得很好,因为我不必访问数据库来查看用户是否有效。我在jwt中遇到的问题是,当令牌过期时,用户必须再次登录。在网上阅读我一直在阅读刷新令牌可以用来解决这个问题,但没有白痴证明解释它如何工作。它们是如何工作的?需要数据库访问吗?
我正在实现一个支持刷新令牌的OAuth2服务器,但是,有一些东西我不能完全理解。 当用户通过请求新的访问令牌,并且他/她请求的范围小于原始访问令牌的范围(5个范围中的3个)时。刷新令牌应该具有原始作用域还是刷新令牌应该具有请求的新作用域? > 如果刷新令牌请求了新的作用域,这是否意味着如果它们继续请求较小的作用域,它们最终将耗尽作用域? 刷新令牌是否应保留原始作用域?这意味着返回的访问令牌对于刷新
我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account
我正在使用Spring boot、OAuth2、JWT custome令牌和MySQL。 问题:我可以获得令牌和刷新令牌,使用刷新令牌我只能按时获得新令牌,如果我再次尝试使用新刷新令牌获得新令牌意味着我将得到以下错误。 错误信息 请查找Auth服务器和资源服务器配置文件。我找不到我错在哪里。 授权服务器 第一次获取刷新令牌 使用上述刷新令牌第二次获取刷新令牌
授权服务器可以给Web应用客户端和本机应用程序客户端颁发刷新令牌。 刷新令牌在传输和储存时必须保持机密性,并只与授权服务器和刷新令牌被颁发的客户端共享。授权服务器必须维护刷新令牌和它被颁发给的客户端之间的绑定。刷新令牌必须只能使用带有RFC2818定义的服务器身份验证的1.6所述的TLS 传输。 授权服务器必须验证刷新令牌和客户端身份之间的绑定,无论客户端身份是否能被验证。当无法进行客户端身份验证
刷新令牌是用于获取访问令牌的凭据。刷新令牌由授权服务器颁发给客户端,用于在当前访问令牌失效或过期时,获取一个新的访问令牌,或者获得相等或更窄范围的额外的访问令牌(访问令牌可能具有比资源所有者所授权的更短的生命周期和更少的权限)。颁发刷新令牌是可选的,由授权服务器决定。如果授权服务器颁发刷新令牌,在颁发访问令牌时它被包含在内(即图1中的步骤D)。 刷新令牌是一个代表由资源所有者给客户端许可的授权的字