当前位置: 首页 > 知识库问答 >
问题:

当客户端发送有效的刷新令牌时,在颁发新访问令牌时更改作用域

童冠玉
2023-03-14

我正在使用来自这个github存储库的php oAU2库。

PHP oauth2库

每当我发送刷新令牌时,我都会收到带有旧作用域的新访问令牌。但我想更改使用新访问令牌返回的作用域。

当我第一次使用用户凭据授权类型生成令牌时,我会获取用户支持的作用域并以这种方式存储它们。

$defaultScope = implode(" ", $scopes);$memory = new OAuth2\Storage\Memory(array('default_scope' =>$defaultScope));
$scopeUtil = new OAuth2\Scope($memory);
$this->server->setScopeUtil($scopeUtil);
$this->server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();

其中$scopes是一个数组

例如$scopes=array("ADDUSER "," EDITUSER "," EDITROLE ");

类似地,如果我使用refresh_token授权类型发送刷新令牌,并使用修改后的$scopes运行它,例如$scopes=array("ADDUSER "," edit role ");

  $defaultScope = implode(" ", $scopes);$memory = new OAuth2\Storage\Memory(array('default_scope' =>$defaultScope));
$scopeUtil = new OAuth2\Scope($memory);
$this->server->setScopeUtil($scopeUtil);
$this->server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();

我收到相同的旧作用域(“ADDUSER EDITUSER EDITROLE”),这些作用域是在使用用户凭据授予类型生成新访问令牌时设置的。

那么,当使用刷新令牌生成新的访问令牌时,是否有办法更改范围?还是我在这里做错了什么?

共有1个答案

丁翰海
2023-03-14

当客户端在刷新令牌授权中请求新的访问令牌时,它可以“关闭范围”,请参阅此处规范中有关scope的文档:https://www.rfc-editor.org/rfc/rfc6749#section-6然而,您的授权服务器可能支持,也可能不支持。

 类似资料:
  • 引用的员额: 为什么OAuth v2既有访问令牌又有刷新令牌? 刷新令牌有什么意义?

  • 如果访问令牌请求是有效的且被授权,授权服务器如5.1节所述颁发访问令牌以及可选的刷新令牌。如果请求因客户端身份验证失败或无效,授权服务器如5.2节所述的返回错误响应。 5.1. 成功响应 5.2. 错误响应

  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 我的应用程序使用Google refresh令牌(从Google获得access_token)。我在这里有两个问题: 我知道谷歌刷新令牌不会在6个月内过期(见这里的文档);假设我在1月1日下午5:00pm获得了一个刷新令牌,并且我的应用程序在1月1日下午5:30从Google请求了另一个刷新令牌,那么旧的刷新令牌是否仍然有效(显然旧的还没有过期)?--基本上,我询问新发出的refresh_toke