【问题标题】:OAuth2.0 server grant type user credentials password is not encryptedOAuth2.0 服务器授权类型用户凭证密码未加密
【发布时间】:2020-03-11 22:16:44
【问题描述】:

我也在关注这个人问storage of client credential on OAuth2 server 关于oauth2-server-php-docs 的问题。尽管它回答了客户端机密的一件事,但我想询问用户凭据。检查来自oauth2-server-php-docs的以下代码示例:

// create some users in memory
$users = array('bshaffer' => array('password' => 'brent123', 'first_name' => 'Brent', 'last_name' => 'Shaffer'));

// create a storage object
$storage = new OAuth2\Storage\Memory(array('user_credentials' => $users));

// create the grant type
$grantType = new OAuth2\GrantType\UserCredentials($storage);

// add the grant type to your OAuth server
$server->addGrantType($grantType);

它说用户凭据将存储在内存中,并且没有说明密码加密。这是我的用例——我已经将用户凭据存储在 MySQL 中,密码使用 PHP password_hash() 加密。那么如果 $user['bshaffer']['password'] 只是纯文本,我该如何匹配或使用 $storage = new OAuth2\Storage\Memory() 行?

【问题讨论】:

  • oAuth 的重点是永远不需要用户的密码。 password_hash 是单向哈希,不是加密。
  • 对不起,我应该使用哈希而不是加密这个词。但是我的观点是它不应该是明文。另外,如果规范中可以选择使用 UserCredentials 授权类型,您为什么说“oAuth 的全部意义在于永远不需要用户密码”?我正在开发一个前端和后端完全分离的应用程序。因此,要使我的登录方式符合我的想法,应该使用该授权类型。
  • @ceejayoz 实际上,如果您使用“用户凭据”授权类型,那么实际上,您将处理用户密码。当客户端和资源所有者之间存在高度信任时,使用此授权类型。 tools.ietf.org/html/rfc6749#section-4.3

标签: php oauth oauth2


【解决方案1】:

我也有这个问题。但是,如果您阅读文档中的注释,就在您提到的代码 sn-p 下方,它说:

注意:用户存储是为每个应用程序高度定制的,因此强烈建议您使用 OAuth2\Storage\UserCredentialsInterface 实现自己的存储

我认为我们可以使用“OAuth2\Storage\UserCredentialsInterface”接口为用户模型实现我们自己的用户存储。

【讨论】:

    【解决方案2】:

    我通过拥有自己的网络架构并扩展 Pdo 存储对象来实现用户定义的 password_verify() 来做到这一点。所以我用这个我创建了 mytoken.php,它从前端请求接收帖子,然后使用 AUTH 用户和密码(client_secret)再次向 127.0.0.1 发送请求到 token.php。我这样做是为了不从前端请求发送 client_secret。

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2016-12-22
      • 2021-10-04
      • 2011-08-19
      相关资源
      最近更新 更多