#symfony #anonymous #fosoauthserverbundle
#symfony #Аноним #fosoauthserverbundle
Вопрос:
Я пытаюсь использовать FOSOAuthServerBundle.
Из моего приложения для ios я правильно получаю токен из /oauth/v2/token, я вижу в своей базе данных запись в accessToken и refreshToken с правильным идентификатором пользователя.
Открывая _profile, я вижу, что я аутентифицирован, но я вошел в систему как анонимный… почему это происходит?
При попытке получить доступ к /secured/api/me я перенаправляюсь на /login path …
Кто-нибудь может мне помочь?
Вот мой security.yml
security:
encoders:
FOSUserBundleModelUserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_USER
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
# form_login:
# provider: fos_userbundle
# check_path: /oauth/v2/auth_login_check
# login_path: /oauth/v2/auth_login
anonymous: true
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: true
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
oauth:
resource_owners:
facebook: "/login/check-facebook"
google: "/login/check-google"
login_path: /login
use_forward: false
failure_path: /login
oauth_user_provider:
#this is my custom user provider, created from FOSUBUserProvider - will manage the
#automatic user registration on your site, with data from the provider (facebook. google, etc.)
service: my_user_provider
logout: true
anonymous: true
login:
pattern: ^/login$
security: false
remember_me:
key: "%secret%"
lifetime: 31536000 # 365 days in seconds
path: /
domain: ~ # Defaults to the current domain from $_SERVER
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/oauth/v2/auth, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secured, role: [ IS_AUTHENTICATED_FULLY ] }
.
Комментарии:
1. Для вашего брандмауэра API задано значение ^/api, а для вашего контроля доступа используется ^/secure .
Ответ №1:
Я думаю, что у вас есть в вашем security.yml под api брандмауэра :
//...
api :
// ...
stateless : true
// ...
Вы должны отправлять access_token при каждом запросе.
Кроме того, если вы хотите получить аутентифицированный access_token, вы должны получить его с помощью запроса с параметром de «grant_type=password». С помощью этого access_token ваш сервер будет распознавать пользователя в каждом запросе.
Что-то вроде: PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_IDamp;client_secret=CLIENT_SECRETamp;grant_type=passwordamp;username=USERNAMEamp;password=PASSWORD
(источник: OAuth2 Объяснено: часть 3 — Использование OAuth2 голыми руками)