【问题标题】:Keycloak invalid_token Didn't find publicKey for specified kidKeycloak invalid_token 找不到指定孩子的公钥
【发布时间】:2019-06-23 12:58:50
【问题描述】:

我正在使用 keycloak 来保护我的休息服务并且我能够获取令牌,但是当我使用此令牌来获取我的休息服务响应时,出现以下错误:

HTTP/1.1 401 Unauthorized
Cache-Control: no-cache, no-store, must-revalidate, private
X-Powered-By: Undertow/1
X-XSS-Protection: 1; mode=block
Server: WildFly/11
X-Frame-Options: SAMEORIGIN
Date: Wed, 30 Jan 2019 07:42:45 GMT
Connection: keep-alive
WWW-Authenticate: Bearer realm="demorealm", error="invalid_token", error_description="Didn't find publicKey for specified kid"
X-Content-Type-Options: nosniff
Content-Type: text/html;charset=UTF-8
Content-Length: 71
<html><head><title>Error</title></head><body>Unauthorized</body></html>

我点击下面的链接,但没有得到任何输出来解决这个问题。

keycloak bearer token error - Didn't find publicKey for specified kid

Didn't find publicKey for kid ,Keycloak?

编辑 1 -

根据使用以下命令正确生成详细令牌

curl -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' -i 'https://<IP-ADDRESS>/auth/realms/apirealm/protocol/openid-connect/token' --data 'username=cwlcadmin&password=password@123&client_id=api-client-id&grant_type=password&client_secret=a682049d-587c-4c38-a594-814f08b0ca76'a@123&client_id=api-client-id

但是当使用这个令牌命中rest-api时,上面声明异常即将到来

curl -X GET -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJpeVlweXZtQU9Sc2RtNXlibWNqWUVSRUxJTnVFR2RNOThDeFVMSmdUTHFvIn0.eyJqdGkiOiJkZWQ4YzAzNC02NDM2LTRmNDAtYjZlNC0zYTI3MzcyNDJkODYiLCJleHAiOjE1NDg4NDUzMTQsIm5iZiI6MCwiaWF0IjoxNTQ4ODQzNTE0LCJpc3MiOiJodHRwczovLzEwLjUzLjIwMS4yMDcvYXV0aC9yZWFsbXMvYXBpcmVhbG0iLCJhdWQiOiJhcGktY2xpZW50LWlkIiwic3ViIjoiZjo4OWYzMDE0MC1kNTBjLTQ4ZjMtODIyYi02YmM1YTFkYjM3Yzg6MSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFwaS1jbGllbnQtaWQiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiI0MWY4ZDU0MS1iZWQxLTQ4MjktOTM4ZC0xNjUxYmZlNzFkZTYiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbImh0dHBzOi8vMTAuNTMuMjAxLjIwNyJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfSwiYXBpLWNsaWVudC1pZCI6eyJyb2xlcyI6WyJyZXN0Il19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoicHEvSmJRPT0gaEp6b1J5QT0iLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjd2xjYWRtaW4iLCJnaXZlbl9uYW1lIjoicHEvSmJRPT0iLCJmYW1pbHlfbmFtZSI6ImhKem9SeUE9IiwiZW1haWwiOiJ0NWZxV2c3TjF3aUVWaGIxVlEwPSJ9.mPVPVdoRpwXU5Im9E8tlLz3DMrM8NrJ-oRiRZL0hceaszU0H58ca2HKhrtncY2WzCxidcuPPxb1fIh3XNR7C-Q-ifOS4VaIbAbH3pAehmhuBqu0gq3LAfVw8vBWVClVP1iKtPOz4cGeKqGQpKRRO1f8epSihVnRe3NWk1WVaD63jexc0EqawZpY-DqH1VDf5xpz8BY4UUqAAfAq0X6kZ7kBoqoiHFofS5eZJHx1mbN-N6qiCwGSwXP-V6JucoBygmqVDkoNCS9Ebx9DyQlXHStSd_KGbCLeIgMlYVPB8vsUy55IcrZGNJWVFsWcvudqTXwW2Tg8BBq-tsFkVuABs5w' -H 'Content-Type: application/json' -i 'https://<IP-ADDRESS>/api/v2/0/zones'

仅供参考 - 使用 Wildfly 和 Wildfly 提供的负载均衡器

【问题讨论】:

  • 你的 keycloak 是在服务器还是本地机器上运行?您在哪里运行 Web 服务本地机器或安装 keycloak 的同一台服务器?哪个版本的keycloak
  • 嗨 Subodh,我的 keycloak 和 wildfly 都在远程服务器上运行,前面我有 wildfly 负载平衡器,其余调用由 wildlfy 通过 keycloak 身份验证处理。
  • 您是如何获得访问令牌的,是否用于 demorealm
  • @ravthiru : 是的,对于 demorealm。
  • 您需要检查您的应用程序和密钥斗篷中的客户端名称是否相同

标签: load-balancing access-token keycloak keycloak-services wildfly-12


【解决方案1】:

我有类似的问题。我的后端应用程序在 Spring Boot 中。 原来 application.properties 需要设置 keycloak.realm-key。

参考

https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/java/java-adapter-config.adoc

【讨论】:

    【解决方案2】:

    终于经过几天的努力,我们能够解决Wildfly服务器中添加的子系统的问题和问题,应该是这样的

    <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
                <secure-deployment name="sure-admin-web.war">
                    <realm>Realm_Name</realm>
                    <resource>CLIENT_APP</resource>
                    <use-resource-role-mappings>true</use-resource-role-mappings>
                    <auth-server-url>https://<KEYCLOAK-IP>:8666/auth/</auth-server-url>
                    <ssl-required>NONE</ssl-required>
                    <credential name="secret">7df18c0d-d4c7-47b1-b959-af972684dab0</credential>
                </secure-deployment>
            </subsystem>
    

    在我们的例子中,我们错过了&lt;ssl-required&gt;NONE&lt;/ssl-required&gt;,而在&lt;auth-server-url&gt;,我们添加了错误的负载平衡器 URL,而它应该是 Keycloak URL。

    仅供参考 - 负载平衡器在 HTTPS 上工作,而 keycloak 在 http 上运行

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2020-06-04
      • 2020-02-22
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多