在解释为什么我需要你的帮助之前,请记住我在Symfony 3.4上是全新的,所以请对我宽容。
我尝试创建的是RESTful API
。
对于管理部分,我希望我的用户每天都能登录才能访问应用程序信息中心。我已经这样做了,使用带有每24小时过期的令牌的LexikJWTAuthenticationBundle
。
然后,我的API将有几个client applications
应该使用访问令牌访问我的数据,但不使用JWT。这些客户端应用程序将是移动应用程序(在React Native上实现)和桌面应用程序(在Electron上实现)。
我认为我应该授权这些应用程序访问我的API的方法是使用oAuth
协议为他们提供身份验证令牌。
所以,基本的问题是,如果我可以同时为同一资源配置两个授权方法(JWT + oAuth)。
因此,举例来说,我要说我有以下端点:/api/v1/repository/chocolates
。
使用jms_serializer
我可以选择要在每个组上显示的数据,因此对于用户有ROLE_ADMIN
我可以显示所有产品信息,而对于用户有ROLE_SOME_GRANT
只能查看标题和说明。
是否可以使用我的管理员拥有的/api/v1/repository/chocolates
令牌或使用我的客户端应用所拥有的JWT
令牌来访问oAuth
?
目前我的app/config/security.yml
设置如下:
# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_NUTRITIONIST: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
security: false
api_user_management:
pattern: ^/api/v1/user/(login|request\/reset|password\/reset)
anonymous: true
stateless: true
api_user_management_safe:
pattern: ^/api/v1/user/(login|request\/reset|password\/reset)
anonymous: true
stateless: true
api_user_login:
pattern: ^/api/v1/login
stateless: true
anonymous: true
form_login:
check_path: /api/v1/login
require_previous_session: false
username_parameter: username
password_parameter: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
logout: true
#############################################
## HERE IF I CHANGE THE fos_oauth to false
## I CAN ACCESS MY ENDPOINT : /api/v1/register/new/user
## WHILE IF THAT IS TRUE I GET THE ERROR MESSAGE:
##
## {
## "error": "invalid_grant",
## "error_description": "The access token provided is invalid."
## }
#############################################
api_access:
pattern: ^/api/v1
stateless: true
#lexik_jwt: ~
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
fos_oauth: true
access_control:
- { path: ^/api/v1/user/request/reset, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/v1/user/password/reset, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/v1/user/update, role: IS_AUTHENTICATED_FULLY }
- { path: ^/api/v1/user/((?!request)|(?!password)|(?!update)), role: IS_AUTHENTICATED_FULLY }
- { path: ^/api/v1/register/new/user, role: IS_AUTHENTICATED_FULLY }
- { path: ^/api/v1/, role: IS_AUTHENTICATED_FULLY }
那么,基于该安全设置,您认为在我的应用程序中有多种授权服务吗?