Как передать сгенерированный токен keycloak в запросе get на остальные API? - PullRequest
0 голосов
/ 23 мая 2018

Я использую Keycloak для аутентификации пользователей.Я использовал

KeycloakInstalled keycloak = new KeycloakInstalled(config);

в 1-м приложении, я могу аутентифицировать пользователя и сгенерировать токен.

Теперь на следующем шаге я хочу использовать этот токен для аутентификации остальныхAPI во втором приложении (оба приложения работают на одном сервере, только разные порты).Для этого во втором приложении я добавил роль '*' в сопоставлении ограничений.

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS | org.eclipse.jetty.servlet.ServletContextHandler.SECURITY );

ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler();
context.setSecurityHandler(securityHandler);
securityHandler.addRole("*");
ConstraintMapping constraintMapping = new ConstraintMapping();
constraintMapping.setPathSpec("/*");
Constraint constraint = new Constraint();

constraint.setAuthenticate(true);
constraint.setRoles(new String[]{"*"});
constraintMapping.setConstraint(constraint);
securityHandler.addConstraintMapping(constraintMapping);

KeycloakJettyAuthenticator keyCloakAuthenticator = new KeycloakJettyAuthenticator();
AdapterConfig keyCloakConfig = new org.keycloak.representations.adapters.config.AdapterConfig();

keyCloakConfig.setRealm("myRealm");
keyCloakConfig.setAuthServerUrl("http://172.23.49.9:8180/auth");
keyCloakConfig.setSslRequired("none");
keyCloakConfig.setResource("my_resource");
Map<String,Object> credentials = new HashMap<String,Object>();
credentials.put("secret", "xxxxx-xxxxx-xx-877b-ssefssss");
keyCloakConfig.setCredentials(credentials);

keyCloakAuthenticator.setAdapterConfig(keyCloakConfig);

context.getSecurityHandler().setAuthenticator(keyCloakAuthenticator);

Когда я пытаюсь использовать токен, созданный первым приложением, для доступа к защищенномуресурс в моем приложении через браузер, например:

http://localhost:7100/api/v1/test/code=generated_code

Я получаю следующую ошибку:

ОШИБКА HTTP: 403 Ошибка доступа к / api / v1 /design / test / code = eyJhbGciOiJSUz (усечено для удобства чтения)

Причина:

!role

Какие ошибки я допустил?

Это правильноспособ передачи сгенерированного токена: /code=generated_token?

ПРИМЕЧАНИЕ: я убедился, что конфигурация keycloak в обоих приложениях абсолютно одинакова.

1 Ответ

0 голосов
/ 24 мая 2018

Правильный способ отправки токена, сгенерированного Keycloak, заключается в заголовке HTTP:

Authorization: Bearer {generated_token}

enter image description here

...