gpt4 book ai didi

oauth-2.0 - SAML 认证后使用 JWT 授权 REST API 请求

转载 作者:行者123 更新时间:2023-12-05 03:56:19 28 4
gpt4 key购买 nike

这些天我正在努力寻找配置身份验证 + 授权系统以从移动应用程序使用 REST API 的可能方法。

场景:我们为服务多个用户的大客户开发了 3 个独立的门户。为了为 3 个门户启用 SSO,我们使用 SimpleSAMLphp 实现了 SAML 身份验证系统。每个门户网站都有一个服务提供商,他们向中央 IdP 发出断言请求。IdP 根据数据库检查用户名和密码,该数据库在注册期间对密码进行哈希处理和存储。登录后,门户上的授权由服务器上的 session 处理,到目前为止一切正常。

现在,客户要求我们开发一个移动应用程序,要求用户登录并访问在使用 3 个门户网站期间收集的一些 protected 资源。

我们决定使用 ionic 开发一个前端应用程序,它将使用 node.js 中的 REST API,为所有数据( protected 和未 protected 资源)提供服务。

现在问题来了:为了授权访问 Api 上的 protected 资源,我们希望使用 JWT 轻松实现无状态系统。疑惑是如何进行认证?我们有机会跳过 SAML 过程直接针对数据库检查凭据,否则我们必须实现一个解决方案,其中 SSO IdP 充当身份验证提供者,然后当尝试成功时,API 应用程序将从idp 然后向消费者客户端发出签名的 jwt。这第二种方式是常见的实现方式吗?可能吗?

您建议遵循什么路径?第一个可能很容易实现,但由于我们在应用程序的前端使用 html+js,如果我们决定可能在不久的将来使用第二个解决方案,我们可以从应用程序中回收一些代码来现代化一些功能门户网站,维护 jwt 模式并在网络上使用新的 Api。我相信在这种情况下,使用门户 session 中已经登录的用户数据以某种方式向新 api 请求 token 会更容易。听起来可能吗?

我希望一切都清楚,我们将不胜感激!

谢谢

最佳答案

此处的主要目标是以最佳方式编写您的应用程序代码,通过最新的安全标准(OAuth 2.0 和 Open Id Connect)。SAML 是一种过时的协议(protocol),对网络/移动/API 不友好,也不适合现代编码模型。

听起来您想执行 OAuth,但您没有 OAuth 授权服务器,这是解决方案的关键部分。如果您可以迁移到一个应用程序,您将拥有 future 最好的应用程序选择。

选项 1

使用最标准和最简单的选项 - 但用户必须使用新的登录屏幕 + 凭据登录:

  • 移动或网络用户界面使用授权流程 (PKCE) 并重定向到授权服务器以使用户登录
  • 移动或网络用户界面在登录后收到一个可以发送到 API 的访问 token
  • 访问 token 格式最常见的是 API 可以从中验证和识别用户的 JWT
  • API 不参与登录或 token 颁发过程

选项 2

扩展选项 1 以联合到您的 SAML 身份提供商 - 使用户能够以现有方式登录:

  • 授权服务器配置为信任您基于 SAML 的身份提供者并在登录期间重定向到它
  • SAML idp 显示登录屏幕,然后将 SAML token 发布到授权服务器
  • 授权服务器根据 SAML token 详细信息颁发基于 OAuth 的 token

选项 3

使用桥接解决方案(不推荐,但如果您没有合适的授权服务器,有时值得考虑 - 至少它可以让您的应用使用 OAuth token ):

  • 移动或网络用户界面使用资源所有者密码授予并将凭据发送到您开发的新 OAuth 端点
  • OAuth 端点提供一个/oauth/token 端点来接收请求
  • OAuth 端点根据数据库检查凭据 - 或转换为转发给 IDP 的 SAML 请求
  • OAuth 端点通过第三方库自行发布 JWT 访问 token (如果凭据有效)
  • Web 或移动 UI 将 JWT 访问 token 发送到 API
  • API 验证收到的 JWT 访问 token

关于oauth-2.0 - SAML 认证后使用 JWT 授权 REST API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472505/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com