У меня есть приложение весенней загрузки, которое использует Oauth с OneLogin в качестве сервера авторизации. Теперь я хочу реализовать авторизацию на основе ролей, чтобы предоставлять определенные API только пользователям с определенными привилегиями.
У меня есть пользователи, принадлежащие к группам. Скажем, пользователь A принадлежит к группе администраторов, а пользователь B не принадлежит к группе администраторов. Мой вопрос заключается в том, как я могу использовать эти группы, чтобы разрешить только пользователю A доступ к определенным API.
Это информация об аутентифицированном пользователе для справки:
authorities
0
authority "ROLE_USER" **//says ROLE_USER even when the user belongs to the admin group**
attributes
at_hash "xxxxx"
sub "xxxx"
iss "https://******/oidc/2"
groups
0 "Group A"
1 "Group B"
2 **"DEMO"**
3 **"DEMO Admin"** **//presence in this group should be considered for authorisation**
preferred_username "xxx"
given_name "xxxx"
nonce "xxxxxxx"
sid "xxxxxxx"
aud
0 "xxxxxxx"
updated_at "xxxxxx"
name "xxxxxx"
exp "xxxxxxx"
family_name "xxxxxx"
iat "xxxxxxxx"
email "xxxxxxxx"
idToken {…}
userInfo {…}
1
authority "SCOPE_email"
2
authority "SCOPE_groups"
3
authority "SCOPE_openid"
4
authority "SCOPE_profile"
Я хочу защитить свои остальные контроллеры примерно так:
@PreAuthorize("Belongs to group admin")
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public string delete() {
System.out.println("delete");
}
Это мой файл application.yaml
server:
servlet:
context-path: /demo
spring:
security:
oauth2:
client:
registration:
onelogin:
client-id: *****
client-secret: *******
scope: openid,profile,email,groups
provider: onelogin
provider:
onelogin:
issuer-uri: https://******/oidc/2