Невозможно получить доступ к службе REST с действующим токеном keycloak после защиты с помощью keycloak - PullRequest
0 голосов
/ 05 сентября 2018

с помощью 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>

пользователь имеет роль устройства в брелоке.

Есть идеи?

...