KeyClope-通过OIDC端点检索JWT令牌

KeyClope-通过OIDC端点检索JWT令牌,jwt,keycloak,openid-connect,Jwt,Keycloak,Openid Connect,我目前正在尝试使用POST请求(而不是使用指定的适配器之一)从KeyClope令牌端点检索用户令牌。我已经建立了一个KeyClope领域,并添加了我自己的机器作为客户端。在文档中,令牌端点描述为: /realms/{realm-name}/protocol/openid-connect/token 就我在中所读的内容而言,我需要设置正文参数grant\u type=authorization\u code,以及参数code和redirect\u uri。我还需要设置授权头,我需要一个基本令牌

我目前正在尝试使用POST请求(而不是使用指定的适配器之一)从KeyClope令牌端点检索用户令牌。我已经建立了一个KeyClope领域,并添加了我自己的机器作为客户端。在文档中,令牌端点描述为:

/realms/{realm-name}/protocol/openid-connect/token
就我在中所读的内容而言,我需要设置正文参数
grant\u type=authorization\u code
,以及参数
code
redirect\u uri
。我还需要设置
授权
头,我需要一个基本令牌

到目前为止,我将得到以下答复:

“错误”:“未经授权的客户端”,
“错误描述”: “无效的\u凭据:无效的客户端凭据”


我从哪里获得基本
授权
令牌?我希望我需要提供一个用户名和密码,因为JWT令牌是我试图接收的响应。如果我只想请求一个令牌,是否需要设置
重定向\u url

KeyClope提供了多种检索用户访问令牌的方法,遵循OpenId Connect规范。下面是根据OpenId Connect规范为授权码流(推荐用于web应用程序)执行此操作的步骤:

基本上,如果您不使用任何适配器,在检测到对某个受保护资源的请求时,您应该:

执行到keydeport登录页面的重定向(请记住keydeport使用领域实体,因此您也需要指定它):

您需要将状态值保留在客户端中,因为它需要在重定向过程中生存:

建议客户端使用此参数来维护状态 在请求和回调之间。通常,跨站点请求 伪造(CSRF、XSRF)缓解是通过加密绑定实现的 浏览器cookie中此参数的值

您不能与用户名/密码交互。密钥斗篷身份验证页不支持。登录成功后,将使用有效代码重定向到您的页面:

HTTP/1.1 302 Found
Location: https://client.example.org/cb?
  code=SplxlOBeZQQYbYS6WxSbIA
  &state=af0ifjsldkj
在这里,您需要检查状态是否为您最初发送的状态(您可能需要使用cookies通过web会话跟踪它),并使用该代码获取令牌。您可以使用以下代码向授权端点发送POST:

POST /auth/realms/demo/protocol/openid-connect/auth HTTP/1.1
Host: https://mykeycloakinstance.org
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
  &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb

这是概括的流程,我自己还没有测试过代码,所以使用它作为一个例子,如果你考虑的话,毫不犹豫地修复它;-)p> 另请参见:


您是否实现了获得给定答案的工作?我目前正在使用一种使用客户端id和secret的解决方案(目前运行良好),但我尚未将您的解决方案与完整的身份验证流程相适应。一旦我检查并实施了你的解决方案,我会立即更新,当然,一旦我开始测试并开始工作,我也会接受你的答案(我已经投票了,因为它已经帮了我很多)。好的!!很高兴知道这有帮助;-)根据OIDC规范第3.1.3.1.节的规定,如果您的客户是保密的,您必须只指定授权标题。如果它是公共的,那么它就不是必需的。然而,keydape无法处理公共客户机,因为这根本不起作用(可能是OP问题的原因)。
POST /auth/realms/demo/protocol/openid-connect/auth HTTP/1.1
Host: https://mykeycloakinstance.org
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
  &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb