Wildfly Elytron: Принципал недоступен в SimpleSecurityManager
Я реализовал механизм аутентификации, аналогичный CustomHeaderHttpAuthenticationMechanism, в https://github.com/wildfly-security-incubator/elytron-examples/tree/master/simple-http-mechanism, используя PasswordGuessEvidence, а также другие обратные вызовы, упомянутые в примере. Причина использования специального механизма заключается в том, что помимо простой проверки учетных данных нам также необходимо проверить больше ограничений, чтобы проверить, проверен ли пользователь.
Выполнение этого механизма аутентификации выглядит довольно хорошо, вызывается метод authenticationComplete, а также authorizeCallback проходит успешно. Однако при доступе к EJB через конечную точку восстановления (EJB аннотируется с помощью @SecurityDomain и @RolesAllowed...) метод SimpleSecurityManager.authorize завершается ошибкой, поскольку метод securityContext.getUtil не предоставляет принципала или чего-то еще. Если доступ к методу, аннотированному @PermitAll, будет успешным.
Я предполагаю, что принципал должен быть создан ServerAuthenticationContext при работе через различные обратные вызовы, верно?
Как мне определить, что SimpleSecurityManager может распознать принципал, нужно ли мне создать его в моем механизме аутентификации и как?
1 ответ
В этом случае кажется, что ваше развертывание EJB не было сопоставлено с доменом безопасности WildFly Elytron, поэтому все еще использует защиту PicketBox на уровне EJB, поэтому вы не видите, что идентификация уже установлена.
В подсистеме EJB вы также можете добавить сопоставление домена безопасности приложения для сопоставления из домена безопасности, указанного в развертывании, в домен безопасности WildFly Elytron.
К вашему сведению, в какой-то момент в будущем, когда мы будем готовы удалить PicketBox с сервера, эти дополнительные сопоставления больше не потребуются, они просто, к сожалению, необходимы в настоящее время, пока у нас есть оба решения параллельно.