Включить аутентификацию ролей с помощью Spring Boot (безопасность) и Keycloak?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Включить аутентификацию ролей с помощью Spring Boot (безопасность) и Keycloak?

Сообщение Anonymous »

Я пытаюсь сделать простую вещь.
Хотите сделать запрос к одной конечной точке и отправить токен на предъявителя (от клиента), я хочу это токен должен быть проверен и в зависимости от роли, назначенной в запросе принятия/отклонения keycloak на моей конечной точке.

Я следил за многими учебниками и даже книгами, но большинство из них я просто не делаю. понять.

Следовал этому, чтобы настроить информацию о моей клавиатуре (область, роль, пользователь)
https://medium.com/@bcarunmail/securing-rest- api-using-keycloak-and-spring-oauth2-6ddf3a1efcc2

Итак,

Я в основном настроил свой keycloak с клиентом, пользователем с определенной ролью «пользователь» и настроил его следующим образом:

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

@Configuration
@KeycloakConfiguration
//@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class SecurityConf extends KeycloakWebSecurityConfigurerAdapter
{
/**
* Registers the KeycloakAuthenticationProvider with the authentication manager.
*/
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(keycloakAuthenticationProvider());
}

/**
* Defines the session authentication strategy.
*/
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}

@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}

@Bean
public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(
KeycloakAuthenticationProcessingFilter filter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
registrationBean.setEnabled(false);
return registrationBean;
}

@Bean
public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(
KeycloakPreAuthActionsFilter filter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
registrationBean.setEnabled(false);
return registrationBean;
}

@Override
protected void configure(HttpSecurity http) throws Exception
{
super.configure(http);
http
.authorizeRequests()
.antMatchers("/user/*").hasRole("admin")
.antMatchers("/admin*").hasRole("user")

}
}
Я не понимаю, почему во многих уроках я вижу это (как последнее правило):

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

.anyRequest().permitAll();
По сути, когда я устанавливаю отсутствие безопасности, я могу вызывать конечные точки без токена-носителя.

Но когда я добавляю это как последнее правило

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

 .anyRequest().denyAll();
Я всегда получаю ошибку 403.[/b]

При отладке я нашел это:
Запрос требует обработки аутентификации

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

f.KeycloakAuthenticationProcessingFilter : Attempting Keycloak authentication
o.k.a.BearerTokenRequestAuthenticator    : Found [1] values in authorization header, selecting the first value for Bearer.
o.k.a.BearerTokenRequestAuthenticator    : Verifying access_token
o.k.a.BearerTokenRequestAuthenticator    : successful authorized
a.s.a.SpringSecurityRequestAuthenticator : Completing bearer authentication. Bearer roles: []
o.k.adapters.RequestAuthenticator        : User 'testuser' invoking 'http://localhost:9090/api/user/123' on client 'users'
o.k.adapters.RequestAuthenticator        : Bearer AUTHENTICATED
f.KeycloakAuthenticationProcessingFilter : Auth outcome: AUTHENTICATED
o.s.s.authentication.ProviderManager     : Authentication attempt using org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider
o.s.s.core.session.SessionRegistryImpl   : Registering session 5B871A0E2AF55B70DC8E3B7436D79333, for principal testuser
f.KeycloakAuthenticationProcessingFilter : Authentication success using bearer token/basic authentication.  Updating SecurityContextHolder to contain: org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@355f68d6: Principal: testuser; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@5d7a32a9; Not granted any authorities
[nio-9090-exec-3] o.s.security.web.FilterChainProxy        : /api/user/123 at position 8 of 15 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
nio-9090-exec-3] o.s.s.w.s.DefaultSavedRequest            : pathInfo: both null (property equals)
[nio-9090-exec-3] o.s.s.w.s.DefaultSavedRequest            : queryString: both null (property equals)
Похоже, у меня нет ролей-носителей...

Мои зависимости:

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

        
org.keycloak
keycloak-spring-boot-starter
6.0.1


org.keycloak
keycloak-spring-security-adapter
6.0.1



org.springframework.boot
spring-boot-starter-security

Моя проблема?

Я запрашиваю отправку токена доступа:

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

client_id -> my client from keycloak
username -> my user from keycloak
password -> my password from keycloak
grant_type -> password
client_secret -> from keycloak
Я получаю токен, а затем использую его для запроса эндоинта моего приложения. Мои запросы всегда действительны независимо от того, какую конечную точку я использую (с ролью пользователя или с ролью администратора).

В моих ресурсах у меня есть примерно так:

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

keycloak:
auth-server-url: http://localhost:8080/auth/
resource: users-api
credentials:
secret : my-secret
use-resource-role-mappings : true
realm: my-realm
realmKey:  my-key
public-client: true
principal-attribute: preferred_username
bearer-only: true
Есть идеи, как на самом деле включить роли в этом случае?

Нужно ли мне настраивать клиент для использовать JWT? есть идеи?

Я также добавил аннотации на свою конечную точку

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

@Secured("admin")
@PreAuthorize("hasAnyAuthority('admin')")
но, похоже, они ничего не делают...

-- РЕДАКТИРОВАТЬ --

После исправления URL-адреса, соответствующего ресурсу, я все равно получаю 403.

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

"realm_access": {
"roles": [
"offline_access",
"admin",
"uma_authorization"
]
},
"resource_access": {
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
Это как-то связано с моей проблемой, связанной с ресурсом_access?

Подробнее здесь: https://stackoverflow.com/questions/562 ... d-keycloak
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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