我需要除密钥斗篷令牌之外的其他东西才能访问由密钥斗篷保护的服务吗?

时间:2018-09-14 12:46:46

标签: java rest http token keycloak

我可以从密钥斗篷获得有效的令牌,但是当我尝试使用令牌访问令牌时,仍然收到来自密钥斗篷保护的服务的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错误吗?我想念什么吗?

1 个答案:

答案 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,并确保包含以下内容:

  • grant_type
  • client_id
  • 用户名
  • 密码

我正在运行的代码正在检索session_state(要短得多,而且不像我认为的那样是承载令牌)。由于某些原因,当提供不正确的承载令牌(甚至是过期的令牌)时,我的所有端点都解析了404(而不是其他任何远程有用的代码)。