Выполнение запроса с действительным токеном доступа к Конечная точка /test/hello-auth дает ответ 200. С помощью отладчика я убедился, что код выполняется по ожидаемому пути. Выполнение запроса к конечной точке /test/greeting с тем же токеном доступа всегда приводит к сбою аутентификации, AuthResult auth = new AppAuthManager.BearerTokenAuthenticator(session).authenticate(); всегда приводит к auth< /code> имеет значение null.
Код: Выделить всё
public class TestProviderFactory implements RealmResourceProviderFactory {
public static final String PROVIDER_ID = "test";
@Override
public RealmResourceProvider create(KeycloakSession keycloakSession) {
return new TestProvider(keycloakSession);
}
@Override
public void init(Config.Scope scope) {}
@Override
public void postInit(KeycloakSessionFactory keycloakSessionFactory) {}
@Override
public void close() {}
@Override
public String getId() {
return PROVIDER_ID;
}
}
Код: Выделить всё
public class TestProvider implements RealmResourceProvider {
private final KeycloakSession session;
public TestProvider(KeycloakSession session) {
this.session = session;
}
@Override
public Object getResource() {
return this;
}
@Override
public void close() {}
@GET
@Path("hello")
@Produces(MediaType.APPLICATION_JSON)
public Response hello() {
return Response.ok(Map.of("hello", session.getContext().getRealm().getName())).build();
}
@GET
@Path("hello-auth")
@Produces(MediaType.APPLICATION_JSON)
public Response helloAuth() {
AuthResult auth = checkAuth();
return Response.ok(Map.of("hello", session.getContext().getRealm().getName())).build();
}
@GET
@Path("greeting")
@Produces(MediaType.APPLICATION_JSON)
public Response greeting() {
AuthResult auth = checkAuth();
return Response.ok(Map.of("hello", session.getContext().getRealm().getName())).build();
}
private AuthenticationManager.AuthResult checkAuth() {
AuthResult auth = new AppAuthManager.BearerTokenAuthenticator(session).authenticate();
if (auth == null) { //
Подробнее здесь: [url]https://stackoverflow.com/questions/78758191/authorization-check-not-working-in-custom-keycloak-endpoint[/url]