【发布时间】:2023-03-26 15:22:01
【问题描述】:
我有两个独立的项目:一个 Symfony 项目,它为经过身份验证的用户返回一些 json 和一个 AngularJS 项目,它提供用于检索数据的 UI。 现在,我为防火墙配置而苦苦挣扎,以允许我的 UI 进行正确的身份验证。
这是我的security.yml:
security:
encoders:
AppBundle\Entity\User:
algorithm: sha512
encode_as_base64: false
iterations: 10
providers:
api_key_user_provider:
id: app_bundle.api_key_user_provider
entity_user_provider:
entity:
class: AppBundle\Entity\User
property: email
firewalls:
main:
pattern: ^/(?!login).+
stateless: false
simple_preauth:
authenticator: app_bundle.api_key_authenticator
provider: api_key_user_provider
anonymous: ~
logout: ~
context: dashboard
login:
pattern: ^/login
provider: entity_user_provider
form_login:
login_path: /login
check_path: /login/check
csrf_provider: security.csrf.token_manager
anonymous: ~
context: dashboard
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
所以,当我尝试将凭据从 UI 发布到 /login/check 时,我会得到下一个结果:
AnonymousToken(user="anon.", authenticated=true, roles="")
看来,我的请求正在由AnonymousAuthenticationProvider而不是Entity_user_provider处理。
那么,我的问题:我的 security.yml 配置有什么问题,以及如何正确地使用我的客户端表单进行跨域身份验证?结果我需要返回 api-key。我想,我可以在我的 Security:login 中做到这一点,不是吗?
(为了启用 CORS,我使用的是 NelmioCorsBundle)。
另外,也许这会有所帮助。这是我在 config.yml 中的 CORS 设置:
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: []
allow_headers: []
allow_methods: []
expose_headers: []
max_age: 0
hosts: []
origin_regex: false
paths:
'^/' :
allow_credentials: true
origin_regex: true
allow_origin: ['http://my_local_domain_with_angular']
allow_headers: ['*']
expose_headers: ['*']
allow_methods: ['POST', 'GET', 'DELETE', 'PUT', 'HEAD']
max_age: 3600
如果您需要更多详细信息,请告诉我!
感谢您的帮助!
【问题讨论】:
标签: angularjs symfony security