【问题标题】:Integration of frontend and resource server using okta authentication and client credentials API authentication使用 okta 身份验证和客户端凭据 API 身份验证集成前端和资源服务器
【发布时间】:2020-05-07 08:16:00
【问题描述】:

我们有一个应用程序,它具有与资源服务器通信的前端 UI(这是一个 Web 应用程序)。我们的前端将使用资源服务器中的一些 API 来获取数据。

我计划将前端添加到 Okta 并为 okta 注册用户提供访问权限。

在资源服务器中,我们希望向客户公开一些 API,以集成到他们的系统中(以编程方式)。要使用我们的 API,我们必须向它们提供客户端凭据(客户端 ID/秘密)。使用 clientId/Secret,他们将获得 access_token 并将在后续请求中使用它。一旦用户通过 Okta 登录,我们就可以通过前端 UI 显示这个 clientId/Secret。

我应该如何验证前端对资源服务器的请求?以及如何使用 clientId/Secret 通过客户对资源服务器的请求进行身份验证?我应该为此使用一个或两个不同的令牌吗?

Okta 是否提供用户(客户)可以用来获取 access_token 并将其发送到访问资源服务器和资源服务器针对 Okta 验证令牌的每用户客户端 ID/秘密。

【问题讨论】:

    标签: authentication oauth oauth-2.0 okta okta-api


    【解决方案1】:

    我刚刚做了一些非常相似的事情。你可以在这里阅读我的经历:How to pass/verify Open ID token between .net core web app and web api?

    我不知道您使用的是什么应用程序框架(.net、node 等),但如果您使用的是 .NET,步骤是 (a) 在您的 Web 应用程序中安装中间件,(b) 安装您的 api 应用程序中的中间件,以及 (c) 确保从您的网络应用程序到 api 应用程序的调用传递 id_token。

    除此之外,如果您需要为外部用户保护它 - 它应该以相同的方式工作。唯一的区别是他们将手动调用 /authorize 端点来获取他们的令牌 - 但中间件应该在这两种情况下为您处理令牌验证。

    注意我确实遇到了一件奇怪的事情,那就是我需要传递 id_token 而而不是 access_token。还值得一提的是,应用程序和 api 中对声明的解释不同(例如,用户 ID 的声明名称在它们之间是不同的 - 数据仍然相同)。

    【讨论】:

    • 谢谢带扣!我仔细阅读了您的回答,并且非常清楚如何进行来自 Web App 的身份验证请求。但我们计划不使用中间件,而是使用 API 网关针对 Okta 进行令牌验证。我不清楚如何将此 api 公开给 3rd 方开发人员?一旦他们通过 okta 登录到 UI,我必须给他们 clientId/secret(不确定这将由谁以及如何生成)。他们将使用这个 clientId/secret 来获取令牌(在验证客户端凭据后谁会给他们令牌)。我想为每个客户保留不同的 clientId/Secret。如何做到这一点?
    • 我试图搜索它,但没有找到 Okta 提供此类设施的详细信息。所以我想自己管理 clientId/Secret 并在我们的身份验证服务器中为客户端到客户端身份验证进行 clientId/secret 验证和令牌生成。但是使用这种方法,中间件/api 网关需要知道两种类型的 access_token,一种由 okta 生成,通过 web 应用程序接收,另一种由我们的身份验证服务器生成,当第 3 方尝试直接访问我们的 api 时会出现?您对这种方法有何看法?或者有什么更好的方法来做到这一点?
    【解决方案2】:

    您必须使用 2 个不同的访问令牌。这里有两种不同的流程:

    • Web UI 到 API
    • API 的业务合作伙伴系统

    从技术上讲,这意味着:

    • 授权码流 (PKCE)
    • 客户端凭据流

    就代币而言,这意味着:

    • 在第一种情况下,最终用户在访问令牌中表示(“sub”声明)
    • 在第二种情况下,访问令牌中只有一个客户端 ID 声明

    如果需要,我可以就令牌验证技术提供建议 - 请告诉我。

    对我来说,这感觉像是一个架构问题 - 特别是在识别调用者和版本控制/升级之后应用授权。

    根据我的经验,这些天我倾向于使用以下架构,基于 2 级 API:例如,这些 API 暴露在互联网上:

    • 用户体验 API 服务于 UI
    • 合作伙伴 API 处理 B2B

    两个入口点 API 调用相同的内部核心服务。可能值得与您的利益相关者讨论..

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 2012-08-28
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多