我正在尝试使用FOSOAuthServerBundle。
从我的ios应用程序中,我正确地从/ oauth / v2 / token获取令牌,我可以在我的数据库中看到AccessToken和RefreshToken中的条目以及正确的user_id。
打开_profile,我可以看到我已通过身份验证但我以匿名身份登录... 为什么会这样?
当试图访问/ secured / api / me时,我被重定向到/ login path ...
有人可以帮助我吗?
这里是我的security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: 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 ] }
答案 0 :(得分:0)
我认为你的security.yml中有防火墙'api':
//...
api :
// ...
stateless : true
// ...
您必须在每次请求时发送access_token。
此外,如果您想获得经过身份验证的access_token,则必须通过带有de参数“grant_type = password”的请求来获取它。 使用此access_token,您的服务器将识别每个请求中的用户。
像: PROVIDER_HOST /的OAuth / V2 /令牌的client_id = CLIENT_ID&安培; client_secret = CLIENT_SECRET&安培; grant_type =密码&安培;用户名= USERNAME&安培;密码= PASSWORD
(来源:OAuth2 Explained: Part 3 - Using OAuth2 With Your Bare Hands)