oauth 隐式授权与授权代码授权?

Fre*_*001 5 authentication oauth oauth-2.0

我想更好地理解隐式授权流程和授权代码授权流程之间的区别,因为我不确定我目前的理解是否正确。

  1. 前端应用程序主要使用隐式授权流程来验证用户身份吗?
  2. 隐式授权流程是否只需要 client_id、用户名和密码来进行身份验证,换句话说,client_secret 永远不会发送?
  3. 授权码只是一个短暂的令牌吗?
  4. 授权码交换访问令牌后,客户端可以访问用户帐户多长时间?具体来说,如果客户端是长时间运行的脚本,用户每次运行脚本时都需要进行身份验证吗?或者我们是否可以假设在用户授权后,客户端有权在需要时访问用户(除非用户撤销访问),因此它只需要使用客户端凭据进行身份验证?
  5. 使用授权代码流与隐式流相比有什么优势?
  6. 它自己的资源服务器是否需要客户端 ID?

谢谢

jwi*_*eke 5

OAuth 2.0 授权框架 (RFC 6749)意味着:

隐式流程仅适用于基于浏览器或 JavaScript 的 OAuth 客户端应用程序,不适用于移动设备或可以使用授权代码授予的其他应用程序

隐式授权类型用于获取访问令牌(它不支持刷新令牌的颁发),并针对已知操作特定重定向 URI 的公共客户端进行了优化。

有关使用隐式授权的背景信息,请参阅第 1.3.2 节和第 9 节。有关使用隐式授权时的重要安全注意事项,请参阅第 10.3 节和第 10.16 节。

使用隐式授权类型时,访问令牌在 URI 片段中传输,这可能会将其暴露给未经授权的各方。

-吉姆


Kav*_*uwa 4

虽然 jwilleke 回答了您的大部分问题,但我将回答您的具体问题,

  1. 隐式流程是为无法执行令牌请求的客户端而设计的。来自 OAuth 2.0 规范 - 4.2 部分

隐式授权类型用于获取访问令牌(它不支持刷新令牌的颁发),并针对已知操作特定重定向 URI 的公共客户端进行了优化。这些客户端通常使用 JavaScript 等脚本语言在浏览器中实现。

  1. 它由公共客户使用。他们没有客户秘密。这是因为它们无法保护此类秘密,因为它们在浏览器上运行。

  2. 授权代码的生命周期可以是几秒(30 秒)到几分钟(2 分钟)。与其他代币相比,它们的寿命很短。

  3. 这取决于访问令牌的生命周期。如果有一个长时间运行的任务并且令牌过期,您将必须获取新的访问令牌以进行授权。但是,如果您的特定后端建立了会话,则它的生命周期可能比访问令牌更长。

  4. 优点之一是刷新令牌。它可用于刷新访问令牌,而无需最终用户交互(全新登录)。另外,根据 OAuth 服务器的实现,您可能会获得具有不同生命周期的访问令牌。例如,授权服务器可能会为隐式流颁发短期访问令牌,因为它由公共客户端使用。

  5. 这取决于。如果资源服务器需要使用来自另一个资源服务器的受保护资源(该资源服务器使用访问令牌进行授权),那么您的资源服务器也将需要一个客户端 ID 并遵循特定的流程来获取令牌。但如果它不与外部通信,则无需为其获取客户端 ID。