Распространение контекста безопасности из WAR на другие части развертывания в EAR в WildFly 38.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Распространение контекста безопасности из WAR на другие части развертывания в EAR в WildFly 38.

Сообщение Anonymous »

Мы переходим с WildFly 24 на 38, а также внедряем OIDC с Keycloak. Мы развертываем EAR с несколькими подразвертываниями EJB и WAR.
Если я вызываю EJB через удаленное взаимодействие из нашего настольного приложения, все работает, контекст безопасности создается правильно, а также работает внедрение EJB-компонентов из другого подразвертывания, контекст безопасности распространяется на все остальные подразвертывания EJB.
Проблема в том, что когда я нажимаю конечную точку REST из браузера в одно из мои WAR, контекст безопасности правильный для этого WAR, ctx.getCallerPrincipal().getName() возвращает моего вошедшего в систему пользователя, но если я внедрю EJB из другого подразвертывания, в этих bean-компонентах ctx вызывающий субъект будет анонимным.
Кажется, в Standalone.xml все подключено правильно:
Подсистема EJB3: elytron:подсистема сообщества: Здесь область JWT работает как раз для удаленных вызовов. Область настроена на использование общедоступного клиента: keycloak-public-client
В подсистеме elytron-oidc-client все мои WAR-файлы расположены так:

Код: Выделить всё

my-keycloak-realm
confidentail-keycloak-client
true
https://mykeycloak.com
NONE
preferred_username
true


Настроенный здесь клиент отличается от клиента, настроенного в области JWT. Для этого используется общедоступный клиент.
В подсистеме undertow:community: Undertow имеет это в теге заголовка:
jboss-ejb3.xml во всех EJB META_INF:

Код: Выделить всё




*
mySecurityDomain



Последнее, в WARs WEB-INF файл jboss-web.xml:

Код: Выделить всё

mySecurityDomain

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

Код: Выделить всё

[standalone@localhost:29990 /] /subsystem=undertow:read-resource(recursive=true)
{
"outcome" => "success",
"result" => {
"default-security-domain" => "mySecurityDomain",
"default-server" => "default-server",
"default-servlet-container" => "default",
"default-virtual-host" => "default-host",
"instance-id" => expression "${jboss.node.name}",
"obfuscate-session-route" => false,
"statistics-enabled" => expression "${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}",
"application-security-domain" => {"mySecurityDomain" => {
"enable-jacc" => false,
"enable-jaspi" => true,
"http-authentication-factory" => undefined,
"integrated-jaspi" => true,
"override-deployment-config" => false,
"security-domain" => "ApplicationDomain",
"setting" => undefined
}},
"buffer-cache" => {"default" => {
"buffer-size" => 1024,
"buffers-per-region" => 1024,
"max-regions" => 10
}},
"byte-buffer-pool" => {"default" => {
"buffer-size" => undefined,
"direct" => undefined,
"leak-detection-percent" => 0,
"max-pool-size" => undefined,
"thread-local-cache-size" => 12
}},
"configuration" => {
"filter" => {
"custom-filter" => undefined,
"error-page" => undefined,
"expression-filter" => undefined,
"gzip" => undefined,
"mod-cluster" => undefined,
"request-limit" => undefined,
"response-header" => undefined,
"rewrite" => undefined
},
"handler" => {
"file" => undefined,
"reverse-proxy" => undefined
}
},
"server" => {"default-server" => {
"default-host" => "default-host",
"servlet-container" => "default",
"ajp-listener" => undefined,
"host" => {"default-host" => {
"alias" => ["localhost"],
"default-response-code" => 404,
"default-web-module" => "ROOT.war",
"disable-console-redirect" => false,
"queue-requests-on-start" => true,
"filter-ref" => undefined,
"location" => undefined,
"setting" => {
"access-log" => {
"directory" => "access-log",
"extended" => false,
"pattern" => "%h %l %u %t \"%r\"  %s %b",
"predicate" => undefined,
"prefix" => "access.",
"relative-to" => undefined,
"rotate" => true,
"suffix" => ".log",
"use-server-log" => false,
"worker" => "default"
},
"http-invoker" => {
"http-authentication-factory" => "application-http-authentication",
"path" => "wildfly-services",
"security-realm" => undefined
}
}
}},
"http-listener" => {"default" => {
"allow-encoded-slash" => false,
"allow-equals-in-cookie-value" => false,
"allow-unescaped-characters-in-url" => false,
"always-set-keep-alive" => true,
"buffer-pipelined-data" => false,
"buffer-pool" => "default",
"certificate-forwarding" => false,
"decode-url" => true,
"disallowed-methods" => ["TRACE"],
"enable-http2" => true,
"enabled" => true,
"http2-enable-push" => true,
"http2-header-table-size" => 4096,
"http2-initial-window-size" => 65535,
"http2-max-concurrent-streams" => undefined,
"http2-max-frame-size" => 16384,
"http2-max-header-list-size" => undefined,
"max-buffered-request-size" => 16384,
"max-connections" => undefined,
"max-cookies" => 200,
"max-header-size" => 1048576,
"max-headers" => 200,
"max-parameters" => 1000,
"max-post-size" => 10485760L,
"no-request-timeout" => 60000,
"proxy-address-forwarding" => false,
"proxy-protocol" => false,
"read-timeout" => 90000,
"receive-buffer" => undefined,
"record-request-start-time" => false,
"redirect-socket" => "http",
"request-parse-timeout" => undefined,
"require-host-http11" => false,
"resolve-peer-address" => false,
"rfc6265-cookie-validation" => false,
"secure" => false,
"send-buffer" => undefined,
"socket-binding" => "http",
"tcp-backlog" => 10000,
"tcp-keep-alive" => undefined,
"url-charset" => "UTF-8",
"worker" => "default",
"write-timeout" => 90000
}},
"https-listener" => undefined
}},
"servlet-container" => {"default" => {
"allow-non-standard-wrappers" => false,
"allow-orphan-session" => false,
"default-buffer-cache" => "default",
"default-cookie-version" => 0,
"default-encoding" => undefined,
"default-session-timeout" => 30,
"directory-listing" => undefined,
"disable-caching-for-secured-pages" => true,
"disable-file-watch-service" => false,
"disable-session-id-reuse" => false,
"eager-filter-initialization" => false,
"file-cache-max-file-size" => 10485760,
"file-cache-metadata-size" => 100,
"file-cache-time-to-live" =>  undefined,
"ignore-flush" => false,
"max-sessions" => undefined,
"preserve-path-on-forward" => false,
"proactive-authentication" => true,
"session-id-length" => 30,
"stack-trace-on-error" => "local-only",
"use-listener-encoding" => false,
"mime-mapping" => undefined,
"setting" => {
"jsp" => {
"check-interval" => 0,
"development" => false,
"disabled" => false,
"display-source-fragment" => true,
"dump-smap" => false,
"error-on-use-bean-invalid-class-attribute" => false,
"generate-strings-as-char-arrays" => false,
"java-encoding" => "UTF8",
"keep-generated" => true,
"mapped-file" => true,
"modification-test-interval" => 4,
"optimize-scriptlets" => false,
"recompile-on-fail" => false,
"scratch-dir" => undefined,
"smap" => true,
"source-vm" => "1.8",
"tag-pooling" => true,
"target-vm" => "1.8",
"trim-spaces" => false,
"x-powered-by" => true
},
"websockets" => {
"buffer-pool" => "default",
"deflater-level" => 0,
"dispatch-to-worker" => true,
"per-message-deflate" => false,
"worker" => "default"
}
},
"welcome-file" => undefined
}}
}
}

Насколько я понимаю, и подсистема EJB3, и подсистема Undertow передают аутентификацию и авторизацию Elytron, который создает контекст безопасности для ApplicationDomain, и как EJB3, так и Undertow подключены к нему.
Нет никаких ограничений в любом файле web.xml или application.xml.
Что мне не хватает?
РЕДАКТИРОВАТЬ
Добавлен виртуальный домен безопасности в подсистему elyron, но он по-прежнему не работает.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-wildfl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»