【发布时间】:2019-04-06 17:07:11
【问题描述】:
我们正在使用带有 Jetty 的 keycloak-adapter 来使用 Keycloak 进行身份验证和授权。 根据Keycloak doc for OIDC Auth flow:
此流程的另一个重要方面是公共与机密客户的概念。保密客户必须 在他们交换临时代码时提供客户秘密 令牌。公共客户端不需要提供此客户端密码。 只要 HTTPS 是严格的,公共客户端就很好 强制执行,并且您对重定向 URI 的内容非常严格 为客户注册。
HTML5/JavaScript 客户端总是必须是公共客户端,因为 无法以安全的方式将客户端机密传输给他们 方式。
我们有连接到 Jetty 并使用身份验证的 webapp。因此,我们创建了一个公共客户端,它非常适合 webapp/REST 身份验证。
问题是,一旦我们启用授权,客户端类型就会从 Public 转换为 Confidential,并且不允许将其重置为 Public。现在,我们正在喝汤。由于授权,我们无法拥有公共客户端,也无法将 web 应用程序连接到机密客户端。
这在我们看来似乎是矛盾的。知道为什么客户需要对授权保密吗?对此有任何帮助,我们如何克服这个问题?
谢谢。
【问题讨论】:
-
请指点这里?
-
您使用的是哪个 OAuth 流程?是授权码授权、隐式授权还是其他?
-
这是基于用户名/密码和jwt令牌的正常授权流程。
-
身份验证代码和隐式流均基于该概念,但创建目的不同。
-
我认为作为资源服务器的码头应用程序应该是私有的。您的前端客户端应该是公开的,因为有人可以使用客户端并在开发者控制台中查看客户端密码。我认为您的问题需要更多关于手头的架构和问题的信息,然后才能帮助您。
标签: java web-applications authorization keycloak openid-connect