【发布时间】:2016-01-21 14:24:33
【问题描述】:
我正在尝试建立一个项目,我可以通过以下方式对用户进行身份验证
API 和 Web 接口(登录表单)。到目前为止,我只能使用一个登录表单,即主要的Web 登录表单。我需要通过API 对它们进行身份验证,并调出使用消息自定义的 oauth 表单以通知用户授权,基本上只是一条自定义消息。像 facebook 这样的东西可能会。
在 Symfony2 安全页面上,我目前找不到需要的帮助,也找不到博客。至少不是适合我的那个。
所以完美的场景是
-
http://url.com/为web -
http://url.com/api为api
我为我的用户使用 FOS 用户包,为 oauth 身份验证使用 FOS OAuth 包,为 REST API 使用 FOSRestBundle。
正如this oauth tutorial 中所解释的那样,这正是我想要实现的场景。
当我询问像http://url.com/oauth/v2/token?client_id=24_2qxtvmjv99eso8wg8sowc8c04o488og8gs8wo0osocks0wkcw0&client_secret=33ghqa2w202sooscwogw0kwwwg0gc00k8sgkkw0cgco4cg08s0&grant_type=client_credentials 这样的网址时,它会将我重定向到登录页面。据我了解,我的access_control 是错误的。
这是我的 security.yml 文件:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_USER: [ROLE_CUSTOMER_RSS, ROLE_CUSTOMER_ASS]
ROLE_AGENT: ROLE_USER
ROLE_ADMIN: ROLE_AGENT
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
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
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: false # can be omitted as its default value
ui_login:
pattern: ^/
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
logout: true
anonymous: true
assets:
pattern: ^/(css|images|js)/
security: false
dev:
pattern: ^/(_(profiler|wdt|configurator|error))/
security: false
access_control:
- { path: ^/oauth/v2/auth_login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/logout, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: [ROLE_USER] }
我知道我在这里遗漏了很多东西。请帮忙。
【问题讨论】: