KeyCloak 服务器的自省和 UserInfo 端点 - 返回 401 未经授权

问题描述 投票:0回答:1

我正在尝试在 /openid-connect/token/introspect 端点和 openid-connect/token/userinfo 上添加包装函数。

我尝试通过在请求正文中传递令牌来验证令牌:

Form formData = new Form();
formData.param("client_id", clientID);
formData.param("client_secret", clientSecret);
formData.param("token_type_hint", "requesting_party_token");
formData.param("token", token);

我从以下 URL 获取访问令牌 /openid-connect/token。 我使用相同的访问令牌进行验证,但是当我调用 POST 方法时 /openid-connect/token/introspect URL,我收到 401 未经授权的响应。 同样,当我发送 openid-connect/token/userinfo 的获取请求并在标头中传递令牌时,如下所示:

.header("Authorization", "Bearer " + accessToken)

我收到 401 未经授权的访问。

我可以看到 JWT 令牌中存在的范围 keycloak 是否缺少任何配置。我还添加了一个映射器来与客户端进行映射:

enter image description here

我收到的响应是 401 未经身份验证。

oauth-2.0 keycloak keycloak-rest-api
1个回答
0
投票

使用令牌自省端点时,不使用 client_id/secret,而是以基本授权标头的形式提供 API(受保护资源)身份。

此外,令牌自省适用于要使用的 API,而不是客户端应用程序。

像这样

 POST /introspect HTTP/1.1
 Host: server.example.com
 Accept: application/json
 Content-Type: application/x-www-form-urlencoded
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW

 token=mF_9.B5f-4.1JqM&token_type_hint=access_token

请参阅文档:OAuth 2.0 令牌内省

它说

在 OAuth 2.0 [RFC6749] 中,令牌的内容对于 客户。 这意味着客户端不需要了解有关令牌本身的内容或结构的任何信息,如果 有的。 但仍然存在大量的元数据 可以附加到令牌上,例如其当前的有效性, 批准的范围,以及有关上下文的信息 令牌已发行。 这些信息对于 受保护的资源根据所提供的令牌做出授权决策。

您需要使用基本身份验证方案来传递 id/secret。请参阅此处的维基百科条目:https://en.wikipedia.org/wiki/Basic_access_authentication

此外,在 IdentityServer 中,我们为 API 使用单独的 ID/秘密(与客户端 ID/秘密不同)。这意味着与客户端相比,使用令牌自省端点的 APIS 拥有单独的凭据。令牌自省端点不打算由客户端应用程序使用。

© www.soinside.com 2019 - 2024. All rights reserved.