【问题标题】:Oauth 2.0 and OpenId Connect for REST API authentication and authorization用于 REST API 身份验证和授权的 Oauth 2.0 和 OpenId Connect
【发布时间】:2020-03-05 16:40:09
【问题描述】:

在阅读了有关 OAuth、OIDC、PKCE、JWT 等方面的书籍和视频后。我仍然不知道如何将所有这些用于我的应用程序(安全的 REST API)。

我的用例相当简单。我希望我的用户能够使用 Google、Amazon、Okta 或其他任何方式登录,而我想要从他们那里获得的唯一信息是他们用于登录的电子邮件地址,仅此而已。在他们第一次登录后,他们的电子邮件将被添加到数据库中,并且在一个单独的过程中,我将授予他们一些权限(他们可以访问哪些资源)。

让我们想象一个标准的授权代码流程,让我们快进到访问令牌部分。重定向 URI 已被调用,我们在我的客户端(某处是我的后端/API)中检索访问令牌。至此用户已经成功认证。

但是现在呢?

  • 我不再关心 Google(我还需要访问令牌吗?),但我仍然想检查用户是否可以对每个请求使用我的 API,并且能够根据他的权限访问 API 资源.
  • 如何使用户保持身份验证(仅 2 小时)并检查他的权限?会话 Cookie、令牌或其他有过期时间的东西?
  • 我是否需要自己的授权服务器来检查用户是否有权访问他请求的资源?
  • 考虑到我的要求,如果从 SPA 或移动应用程序访问 API,我是否需要 PKCE?授权代码流还不够吗 - SPA 或移动应用程序检索授权代码,然后从 API 调用回调端点?

更重要的问题是,我是否提出了正确的问题,还是我完全偏离了轨道,而不是它应该如何工作?

【问题讨论】:

    标签: authentication oauth-2.0 authorization openid-connect


    【解决方案1】:

    就您的问题而言:

    • 您的 API 在每个请求上都需要一个访问令牌
    • 通过在每个请求上发送访问令牌来管理无状态会话
    • 建议使用您自己的授权服务器来管理重定向到社交提供商 - 这将简化您的 UI 和 API,它们只需要处理一种类型的令牌 - 这也意味着您可以控制您的应用程序使用的令牌
    • 是的 - 将 PKCE 用于公共客户端 - 授权服务器和 UI 安全库将为您处理此问题

    您的用例在技术层面上一点也不简单,需要大量了解。一个好的起点是了解这些方面:

    • UI 的作用以及编码解决方案的外观
    • 授权服务器的作用及其配置
    • API 的作用以及编码解决方案的外观
    • 使用 Open Id Connect 消息

    我的这些链接可能对浏览有用:

    给定访问令牌,UI 和 API 都可能通过第二个链接中的步骤 12 获取电子邮件以查找用户信息。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2011-08-29
      • 2017-07-21
      • 2015-09-02
      • 2011-12-04
      相关资源
      最近更新 更多