Java keydepate公共客户端和授权

Java keydepate公共客户端和授权,java,web-applications,authorization,keycloak,openid-connect,Java,Web Applications,Authorization,Keycloak,Openid Connect,我们正在使用带有Jetty的Key斗篷适配器,使用Key斗篷进行身份验证和授权。 根据: 此流程的另一个重要方面是公开与机密客户的概念。机密客户必须 在客户交换临时代码时提供客户机密 代币。公共客户端不需要提供此客户端机密。 只要严格遵守HTTPS,公共客户端就完全可以 强制执行,并且您对重定向URI的定义非常严格 为客户注册 HTML5/JavaScript客户端必须始终是公共客户端,因为 无法以安全的方式将客户机机密传输给他们 态度 我们有连接到Jetty并使用auth的Web应用程序。因此

我们正在使用带有Jetty的Key斗篷适配器,使用Key斗篷进行身份验证和授权。 根据:

此流程的另一个重要方面是公开与机密客户的概念。机密客户必须 在客户交换临时代码时提供客户机密 代币。公共客户端不需要提供此客户端机密。 只要严格遵守HTTPS,公共客户端就完全可以 强制执行,并且您对重定向URI的定义非常严格 为客户注册

HTML5/JavaScript客户端必须始终是公共客户端,因为 无法以安全的方式将客户机机密传输给他们 态度

我们有连接到Jetty并使用auth的Web应用程序。因此,我们创建了一个公共客户端,它对webapp/REST身份验证非常有效。
问题是,一旦我们启用授权,客户端类型就会从Public转换为机密,并且不允许将其重置为Public。现在,我们陷入困境。由于授权的原因,我们无法拥有公共客户端,也无法将webapps连接到机密客户端。
这似乎与我们相矛盾。知道客户授权需要保密的原因吗?在这方面有什么帮助吗?我们如何克服这个问题?

谢谢。

据我所知,您的前端和后端应用程序是分开的。如果您的前端是一个静态web应用程序,而不是由同一个后端应用程序(服务器)提供服务,并且您的后端是一个简单的REST API,那么您将配置两个KeyClope客户端:

  • public
    前端应用程序的客户端。它将负责获取JWT代币
  • 仅承载
    客户端,将连接到后端应用程序
要启用授权,您需要创建角色(领域或客户端范围,从领域级别开始,因为这更容易理解)。然后,将在KeyClope管理UI中为每个用户分配一个角色。基于此,您应该(在后端)配置KeyClope适配器配置

综合考虑,为了与RESTAPI通信,您需要将JWT令牌附加到授权头中的每个HTTP请求。根据您的前端框架,您可以使用以下任一选项:

  • 其他绑定(,)
另外,为了调试,我刚刚编写了一个名为 这将帮助您获取和分析JWT令牌(范围、角色等)。它可以用于公共和机密客户。你 也可以使用和


HTH:)

我想您在创建客户端时,指的是KeyClope管理控制台中的“授权启用”开关。如果您查看标签旁边的问号,您将看到提示“启用/禁用客户机的细粒度授权支持”

这适用于为用作资源服务器的后端应用程序创建客户端时。在这种情况下,客户端将是保密的

如果您想为前端应用程序创建一个客户端,对用户进行身份验证并获得JWT,那么您不需要这样做


另请参见:

经过深思熟虑,我们发现连接到公共客户端时,实际上不需要在公共客户端上启用授权。当任何请求到达公共客户端时,它只执行身份验证部分。授权部分在实际请求到达资源服务器(在我们的示例中,Jetty)时完成使用保密客户机(因为Jetty了解其中配置的保密客户机).

请在此找到指针?您使用的是哪种OAuth流?是授权码授权、隐式授权还是其他?这是基于用户名/密码和jwt令牌的正常授权流。授权码和隐式流都基于该概念,但创建的目的不同。我相信作为资源服务器的jetty应用程序应该是私有的。您的前端客户端应该是公共的,因为有人可以直接使用客户端并在开发人员控制台中查看客户端机密。我认为您的问题需要更多关于体系结构和手头问题的信息,然后才能得到任何人的帮助。是的,我需要这个。我需要KeyClope来授权来自SPA(公共客户端)的请求这样我就不需要在我的所有资源服务器中重复实现该逻辑。我不明白他们为什么不为公共客户端启用授权。我的后端rest api在我注销(从我的前端应用程序或关闭与KeyClope管理控制台的会话)后仍能正常工作是正确的吗在到期时间之前?我有一个keydove中的公共客户端,我的后端应用程序仅使用bearer进行设置。你能详细说明授权应该如何配置吗?如果REST API使用从客户端传递的JWT令牌来评估使用keydove的资源访问,我将获得
客户端应用程序[公共客户端]未注册为资源服务器。
因为KeyClope评估JWT的
azp
(为)字段。我仍然不了解它。机密客户端仍然需要身份验证。如果您仅在公共客户端上进行身份验证,如何“通过”“给机密客户的令牌?或者您再次进行身份验证?在KeyClope中,您可以将公共客户端连接到机密客户端。这样,公共客户端令牌将与机密客户端一起工作。@NumeroUno您可以提供更多详细信息,以及如何连接它们吗?@NumeroUno您有没有机会详细介绍一下?我试图传递公共客户端收到的访问令牌以获得对资源的访问权,但由于保护服务评估JWT令牌的
azp
(issue for)字段,因此它尝试查找公共客户端上的资源,该客户端未定义资源:
客户端应用程序[公共客户端]未注册为资源服务器。
好的,这与
authzClient.pro相当