с помощью API Java Keycloak для получения действительного токена, а затем с помощью этого токена, чтобы попытаться получить доступ к сервису отдыха, который был защищен с помощью Keycloak, но получил ошибку 404, Not Found.
Кажется, токен не работает?
Вот мой код Java для получения токена из keycloak. Это похоже на работу:
AuthzClient authzClient = AuthzClient.create();
AccessTokenResponse response = authzClient.obtainAccessToken(user, password);
Я получил действительный токен в ответе. Затем я пытаюсь использовать этот токен для доступа к службе REST, защищенной с помощью keycloak:
String urlString = "http://localhost:3333/appname-1.0.0-SNAPSHOT/project/0.1/device/return/all";
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
Я защитил файл war с помощью службы REST, добавив файл web.xml и файл keycloak.json. Если я удаляю из войны файл web.xml и keycloak.json, то приведенный выше код возвращает 200. Но тогда служба не является безопасной.
web.xml:
<module-name>application</module-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>Device</web-resource-name>
<url-pattern>/device/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>device</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>this is ignored currently</realm-name>
</login-config>
<security-role>
<role-name>device</role-name>
</security-role>
пользователь имеет роль устройства в брелоке.
Есть идеи?