我可以从密钥斗篷获得有效的令牌,但是当我尝试使用令牌访问令牌时,仍然收到来自密钥斗篷保护的服务的404找不到响应。我还需要做什么?要访问使用密钥斗篷保护的服务还需要什么?
我拿回了不记名令牌。
我创建了最简单的服务,并将其作为WAR部署到Wildfly。我将keycloak适配器安装到wildfly中,并在修改war.xml的同时向战争添加了一个keycloak.json文件。
对于web.xml,我添加了文档中的信息:
<module-name>application</module-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>Resources</web-resource-name>
<url-pattern>/resources/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>KEYCLOAK</auth-method>
</login-config>
<security-role>
<role-name>user</role-name>
</security-role>
我将用户角色添加到了密钥斗篷
我有一个客户端程序,该程序需要一个用户名和一个密码,并从安装密钥斗篷中获取一个令牌
AuthzClient authzClient = AuthzClient.create();
AccessTokenResponse response = authzClient.obtainAccessToken(name, password);
String tokenStr = response.getToken();
然后我尝试使用该令牌对以密钥斗篷保护的WAR进行REST调用:
String urlString = "http://localhost:8080/simple-rest-0.0.1-SNAPSHOT/resources/message";
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
String authString = "Bearer " + tokenStr;
con.setRequestProperty("Authorization", authString);
basicStatus = con.getResponseCode();
basicStatus返回404。我在这里只是使用keycloak错误吗?我想念什么吗?
答案 0 :(得分:1)
我遇到了类似的问题,到处都是404(最初很奇怪,因为我的浏览器可以验证端点,但我的代码/ curl /邮递员都不行)。
就我而言,我以为我正在获取不记名令牌,但是我实际上正在获取的String是其他东西。承载令牌应该很长(并且可以通过其他方法进行验证/比较)。
要进行邮递员索取令牌:
执行POST到:<host>/auth/realms/<realm>/protocol/openid-connect/token
添加标题Content-Type:application / x-www-form-urlencoded
在正文中,选择x-www-form-urlencoded,并确保包含以下内容:
我正在运行的代码正在检索session_state(要短得多,而且不像我认为的那样是承载令牌)。由于某些原因,当提供不正确的承载令牌(甚至是过期的令牌)时,我的所有端点都解析了404(而不是其他任何远程有用的代码)。