【发布时间】:2019-12-23 06:53:18
【问题描述】:
我正在使用 API Platform 开发一个 API,我正在努力解决如何保护 API。
我的前端应用程序(博客网站)包含不需要用户登录即可查看的内容(公共内容)。要从 API 中获取此内容,我不需要对用户进行身份验证,但我仍然需要授权应用程序以防止每个人都能够调用 API。一些示例路线是:
GET /api/blogs
GET /api/blogs/{id}
用户仍然可以登录以访问网站的其他部分(受保护的内容)。对于那些 API 调用,我需要对用户进行身份验证以检查他们的角色(管理员或其他人)。一些示例路线是:
POST /api/users
POST /api/blogs
official documentation 建议使用 JWT 进行身份验证,但这意味着用户必须登录才能查看公共内容。在security.yaml 我试过这个:
access_control:
- { path: ^/api/blogs, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/users, roles: ROLE_ADMIN }
但是/api/blogs 被列入白名单,每个人或任何应用程序都可以从 API 调用它。
这是我security.yaml的全部内容:
security:
encoders:
App\Entity\User:
id: App\Security\PasswordEncoder
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/api/
stateless: true
anonymous: true
provider: app_user_provider
json_login:
check_path: api_authenticate
username_path: email
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
access_control:
- { path: ^/api/blogs, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/users, roles: ROLE_ADMIN }
我的问题是,在我的情况下处理授权和身份验证的正确方法是什么? JWT 是否足以兼顾两者?我需要在数据库中创建一个特殊的 API 用户吗?
【问题讨论】:
-
@yivi 感谢您的回复。等我到电脑前去看看
标签: symfony authentication jwt authorization api-platform.com