Проводка Spring Security в Camunda Engine, что переопределить?
Мне удалось интегрировать Spring Security с IdentityService Камунды. Моя цель - разделить общую область аутентификации между ними, потому что у нас есть веб-приложение на основе весенней загрузки, которое также запускает камунду. В нашем приложении Spring Security должен исключительно управлять единой областью аутентификации, действуя только в качестве клиентского кода, доступного только для чтения.
Мы планируем связать бизнес-процессы с пользователями, и эти пользователи должны проходить аутентификацию с помощью Spring Security.
У меня вопрос, что я должен точно реализовать / переопределить?
Мой текущий код выглядит следующим образом:
import org.camunda.bpm.engine.impl.identity.db.DbReadOnlyIdentityServiceProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
/**
* Wires Camunda {@link org.camunda.bpm.engine.IdentityService} with Spring Security.
* TODO check if other method overrides are needed
*/
@Component
public class SpringSecurityReadOnlyIdentityServiceProvider extends DbReadOnlyIdentityServiceProvider {
@Autowired
private AuthenticationManager authenticationManager;
/**
* Checks if username and password is valid.
*
* @param userId Username
* @param password Password
* @return True if authentication succeeded
*/
@Override
public boolean checkPassword(String userId, String password) {
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(userId, password));
} catch (AuthenticationException e) {
return false;
}
return true;
}
}
Это работает (сама проводка), но я не знаю, какие еще методы я должен переопределить.
Этот код проверяет, правильно ли указаны имя пользователя и пароль в области безопасности Spring. Этого достаточно? Я прочитал документацию для Камунды. Он содержал около двух строк, в которых говорилось, что я должен реализовать ReadOnlyIdentityProvider или WritableIdentityProvider, но я думаю, что реализация каждого метода является просто излишним. Вот почему я расширил DbReadOnlyIdentityServiceProvider.
Спасибо!
0 ответов
Тем временем Camunda 7.9 представила ContainerBasedAuthenticationFilter, который можно использовать в сочетании с настраиваемым Camunda AuthenticationProvider.
Это полный пример интеграции Camunda >=7.9 с Spring Security: https://github.com/camunda-consulting/code/tree/master/snippets/springboot-security-sso