Mam podstawowe API, które uwierzytelnia użytkowników za pomocą FOSOAuthServerBundle. Użytkownicy mogą mieć role ROLE_USER i ROLE_ADMIN. Bazując na dokumentach FOSOAuthServerBundle, domyślnym zachowaniem jest używanie zakresów jako ról, więc pomyślałem, że gdy mam zwykłego użytkownika, pakiet zwróci scope: user
w odpowiedzi, a gdy jest to użytkownik admin, zwróci scope: admin
. Ale tak nie działa. Pakiet zwraca wszystko, co jest skonfigurowane w pozycji supported_scopes
. Poniżej znajduje się mój config.yml
.Jak radzić sobie z zakresami ROLES i FOSOAuthServerBundle
fos_oauth_server:
service:
options:
supported_scopes: user admin
Moja access_control
sekcja w security.yml
jest pusta, a moja sekcja firewalls
jest poniżej:
firewalls:
users_create:
pattern: ^/v1/users
methods: [POST]
security: false
api:
pattern: ^/
security: true
fos_oauth: true
stateless: true
access_control:
# You can omit this if /api can be accessed both authenticated and anonymously
ten sposób wiązka zawsze powrócić user admin
w zakresie, nawet jeśli użytkownik nie posiada rolę ROLE_ADMIN.
{
"access_token": "ZGQ2ODE5ZjAzNTZkOWY0OWMyNmZmODE4MjcwZTJmYjExNzY0NzQxOTRmMzk4NzA2Mjc2NjIyZmY1ZDgwMzk4NA"
"expires_in": 3600
"token_type": "bearer"
"scope": "user admin"
"refresh_token": "NmM5ZGFmNzBiNTNjYmQzMTQ1MTk0ODJjOTAxMWU0YWIwMzM1MzgyODg4ZTAzNTI5ZTk2MDc3OGU2MTg0MWZiMA"
}
Czego mi brakuje? Czy rola użytkownika nie jest powiązana z zakresem tokenu? Czy istnieje lepszy sposób sprawdzenia, czy mój użytkownik jest administratorem czy nie?
Może to nie jest twój 'security.yml' i jest wklej z' config.yml'? Czy mógłbyś podać sekcję 'access_control:' z 'security.yml'? –
Masz rację Illya. Edytuję moje pytanie. –