将 Keycloak 用作 REST API 并同时避免使用 Keycloak 形式的安全隐患?
Security implications of using Keycloak as an REST API and avoiding Keycloak forms all together?
我目前正在开发一个项目,我们使用 OpenID Connect 和 Oauth2 以及 Keycloak 的默认表单。
我们有实施 2FA 的要求。在一个理想的世界中,我们会把 keycloak 表单全部废弃,只使用 keycloak 作为无头 API 并在主应用程序本身中构建登录表单。
原因是
- 我们有内置的组件 Vue.js 我们想重复使用(例如 password/code 输入、密码强度指示器等)
- 我们不想在两个不同的项目中保持相同的样式
- 我们不想维护或受限于自定义模板
- 不想在 vanilla js 中编写自定义行为
经过研究,我发现不推荐使用 keycloak 作为 API,因为客户端和第 3 方登录之间的重定向充当额外的安全层,并且是 OAuth2 的一部分。 0 模型。我们正在存储用户的医疗信息,因此安全是个问题。
你们有什么建议?
您是对的,不建议通过 API 使用 OAuth 服务器。重定向是 OAuth 流程安全性的重要组成部分。这当然会产生您提到的所有缺点 - 必须维护具有相同功能的多个代码库。
此问题的解决方案是使用具有强大安全机制的超媒体 API,可用于执行 OAuth 流程。不幸的是,这还不是一个标准,它是一个新兴的特性。您可以阅读这样的 API 是如何工作的 here and here 您可以找到我们在 Curity 所做的实施的安全功能的深入描述。
目前在 Keycloak 中实现它绝对不是一件容易的事,但很可能没有其他选项可以解决这个问题——正如你所说的你需要 2FA,没有 2FA 的一个选项是使用 Resource所有者密码流程。
我目前正在开发一个项目,我们使用 OpenID Connect 和 Oauth2 以及 Keycloak 的默认表单。
我们有实施 2FA 的要求。在一个理想的世界中,我们会把 keycloak 表单全部废弃,只使用 keycloak 作为无头 API 并在主应用程序本身中构建登录表单。
原因是
- 我们有内置的组件 Vue.js 我们想重复使用(例如 password/code 输入、密码强度指示器等)
- 我们不想在两个不同的项目中保持相同的样式
- 我们不想维护或受限于自定义模板
- 不想在 vanilla js 中编写自定义行为
经过研究,我发现不推荐使用 keycloak 作为 API,因为客户端和第 3 方登录之间的重定向充当额外的安全层,并且是 OAuth2 的一部分。 0 模型。我们正在存储用户的医疗信息,因此安全是个问题。
你们有什么建议?
您是对的,不建议通过 API 使用 OAuth 服务器。重定向是 OAuth 流程安全性的重要组成部分。这当然会产生您提到的所有缺点 - 必须维护具有相同功能的多个代码库。
此问题的解决方案是使用具有强大安全机制的超媒体 API,可用于执行 OAuth 流程。不幸的是,这还不是一个标准,它是一个新兴的特性。您可以阅读这样的 API 是如何工作的 here and here 您可以找到我们在 Curity 所做的实施的安全功能的深入描述。
目前在 Keycloak 中实现它绝对不是一件容易的事,但很可能没有其他选项可以解决这个问题——正如你所说的你需要 2FA,没有 2FA 的一个选项是使用 Resource所有者密码流程。