OAuth 2.0资源所有者访问令牌实现



我已经阅读了有关OAuth 2.0的RFC6749,还有很多问题和博客文章,但我仍然不清楚如何实施某些事情。

当前,用户通过网页上的表单登录并使用该应用程序,该应用程序可以调用数据库调用以获取和操纵资源。目标是从应用程序中抽象资源。

在OAuth 2.0的背景下,我已经确定了:

  • 用户是资源所有者
  • 我的Web应用程序是客户端,特别是机密客户端
  • 我的API是资源服务器

我还了解OAuth 2.0通过授权赠款和访问令牌(至少)工作。我想支持我的授权服务器中的密码和客户凭证授予类型。我们还假设我的Web应用程序是访问API的唯一授权应用程序。

有关使用资源所有者授权的实施问题的问题:

  1. 每个用户是否会收到自己的访问令牌?我假设是的,因为我需要区分不同的用户出于其他目的(例如授权)
  2. 用户可以接收多个访问令牌吗?(例如,如果他们以1个以上的用户代理/计算机登录到应用程序)
  3. 我在Authorization HTTP标头中将什么发送到授权服务器?(记住我只有一个客户)
  4. 如何从访问令牌获得用户的身份?(例如用户ID/用户名)
  5. 在Web应用程序中将访问令牌存储在$_SESSION中是否安全?

我的总体评论是,您不应使用资源所有者密码凭据赠款来实现所需的目标,而是授权代码授予。这将使您能够独立于客户(应用程序)并实现SSO升级身份验证手段。

  1. 接收访问令牌不是用户(资源所有者),而是客户端(您的Web应用程序)。使用资源所有者密码授予或授权代码授予时,您的客户端会为每个用户接收访问令牌。使用客户凭证授予时,获得访问令牌是最合乎逻辑的

  2. 通常不是因为在OAuth 2.0中,用户不登录到应用程序。除非使用资源所有者密码凭据流,否则它们也是如此。在这种情况下,应用程序应注意该用户有现有的访问令牌,并且不会要求新的访问令。

  3. 似乎将Authorization标头中的访问令牌使用与资源服务器中的访问令使用,并通过对客户端或资源所有者的身份验证授权服务器进行身份验证。在后一种情况下,不需要HTTP基本身份验证,这只是客户/资源所有者身份验证的选项之一。

  4. 如果要对用户进行身份验证,则需要应用OpenID Connect,这是构建在OAuth 2.0顶部的用户身份验证协议。另请参见Q2中的先前链接。如果您需要有关向客户端提供访问令牌的信息的信息令牌)。

  5. 这是一种与您的PHP安装一样安全的常用方式,请参见:$ _Session Array的安全性

最新更新