【问题标题】:OAuth2 PHP change expiration timeOAuth2 PHP更改过期时间
【发布时间】:2023-03-27 13:21:01
【问题描述】:

我使用这个库:Oauth2 PHP

找不到更改过期时间的设置,我试过了:

new OAuth2\Server($this->_mem, array('use_jwt_access_tokens' => true, 'access_token_lifetime' => 2419200));

但令牌的生命周期始终是 3600。正确的设置是什么?

编辑:按照建议,我尝试使用刷新令牌

new OAuth2\Server($this->_mem, array('use_jwt_access_tokens' => true, 'always_issue_new_refresh_token' => true));

client_credential 授权类型 + JWT 持有者有效,但我从未获得刷新令牌(仅访问令牌)。即使通过令牌验证,我也从未获得刷新令牌。

编辑:由于刷新对我不起作用,因此我尝试设置令牌过期时间

new OAuth2\Server($this->_mem, array('use_jwt_access_tokens' => true, 'access_lifetime' => 12000));

对客户端凭据的响应仍然返回一个短令牌

{ ["access_token"]=> string(648) "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpZCI6ImU0NjE0MzdhMjY2YjFkNWY0OWU5MDY5MjQwODg5NjU0MDI2ZGRmODAiLCJpc3MiOiIiLCJhdWQiOiI4OWM2MjRmNTNiYTVmOTM3NjFmZWFhNmU1MGI1ZDk1NGQ4ZGRjMTIxIiwic3ViIjpudWxsLCJleHAiOjE0MzQ0NjI2NDIsImlhdCI6MTQzNDQ1OTA0MiwidG9rZW5fdHlwZSI6ImJlYXJlciIsInNjb3BlIjoicHVibGljIHJlYWRfbmV3cyJ9.Mk_KyUk_8yPnq9eEjvgVOJXBOkQSifAPbEaUvY4X9WvfmImPnC7PJx_99ODpiJR_gMLhZ3gBl1gQEJ2z6xUZ83dntCYzGWumkVLNpJG8omuVkmZqNnbLYYXl-vzmGOblceeDrKw_lrXc4rb72BeFaMeZWwFV7YMrgA0LOsYyZmAiDblcbHtpPGpUd2EC3y7VxLnyA8u07eY4aswOHwClPlDwHX_HwfMUmDLWkoTcrRf1AvKn-cnj41eL0SU9AJHWab8AOK7lxDsaqnits5pXj--cG9hr8pWOsFPQ2D9qYOsMvbEOi4zDJEdaIp-qvzn6N5Wrm5GxdbU1AqwvM531hQ" ["expires_in"]=> int(3600) ["token_type"]=> string(6) "bearer" ["scope"]=> string(16) "public" } 

这似乎是一个缓存问题,令牌现在设置为正确的过期长度/时间

【问题讨论】:

    标签: php oauth-2.0


    【解决方案1】:

    您可以通过检查the code 使用access_lifetime OAuth2\Server 配置参数来更改access_token 的生命周期。

    access_lifetime 配置参数用于在OAuth2\ResponseType\JwtAccessToken line 63 中创建令牌:

    $expires = time() + $this->config['access_lifetime'];
    

    这可以在实例化服务器时设置,该服务器采用OAuth2\Server lines 109 - 126 中列出的以下配置参数。

        // merge all config values.  These get passed to our controller objects
        $this->config = array_merge(array(
            'use_jwt_access_tokens'        => false,
            'store_encrypted_token_string' => true,
            'use_openid_connect'       => false,
            'id_lifetime'              => 3600,
            'access_lifetime'          => 3600,
            'www_realm'                => 'Service',
            'token_param_name'         => 'access_token',
            'token_bearer_header_name' => 'Bearer',
            'enforce_state'            => true,
            'require_exact_redirect_uri' => true,
            'allow_implicit'           => false,
            'allow_credentials_in_request_body' => true,
            'allow_public_clients'     => true,
            'always_issue_new_refresh_token' => false,
            'unset_refresh_token_after_use' => true,
        ), $config);
    

    根据Server.phpJwtAccessToken.php的代码,还支持刷新令牌。

    【讨论】:

    • @RaelGugelminCunha:你为什么提到谷歌?该问题提到了 OAuth 2.0 Server PHP,而不是 Google。任何人都可以在RFC 6749 之后创建 OAuth 2.0 授权服务器,包括 Facebook、LinkedIn、Google 以及运行 OP 中列出的项目的任何人:OAuth 2.0 Server PHP。
    • 它成功了,它被困在服务器缓存中,感谢您的帮助
    【解决方案2】:

    在 server.php 中(您在其中传递授权类型和客户端凭据)

    $config = array(
        'access_lifetime' => 86400
    );
    $server = new OAuth2\Server($storage, $config);
    

    来源:https://github.com/bshaffer/oauth2-server-php/issues/699

    【讨论】:

      猜你喜欢
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多