【发布时间】:2015-02-03 00:25:39
【问题描述】:
我在我的 API (Silex) 中使用基本身份验证,端点从客户端接收用户+密码,通过基本身份验证验证用户,然后返回用于进一步请求的令牌。现在,当我的应用程序进行 AJAX 调用时,如果凭据正确,一切都会顺利进行。如果凭据错误,API 会返回 401 和设置的 WWW-Authenticate 标头。这会导致浏览器自动显示默认浏览器登录表单。
我不希望这种情况发生。在 StackOverflow 中,他们说唯一的两种解决方案是返回 400 而不是 401,或者将 WWW-Authenticate 标头更改为“FormBased”之类的内容。
在安全组件的 BasicAuthenticationEntryPoint.php 中,statusCode 设置为 401,WWW-Authenticate 设置为“Basic ...”。
如果我在那里应用更改,它可以工作...但我需要将其作为我的项目的一部分...我应该如何覆盖 Symfony\Component\Security\Http\EntryPoint\BasicAuthenticationEntryPoint.php 以适应它满足我的需要?知道是否有解决方法吗?我理解这应该是一个很常见的问题,一般是怎么解决的?
【问题讨论】:
-
所以你不想使用来自网络服务器的 http auth 而是你自己的登录系统?
-
我确实想在网络服务器中使用基本身份验证。但仅针对我返回令牌的请求。给定凭据,我正在对用户进行身份验证并返回令牌,这样我就不需要在后端保留状态,但 js 应用程序只需要在以后的每个请求中添加令牌。
-
好吧,听起来你只需创建自己的provider,然后使用它来设置series of custom classes,这将允许你定义自己的入口点类。我不确定编排是如何工作的,所以我目前无法向您提供详细信息,我只能说这是可能的,并为您指明这个大方向。
-
谢谢,这很有帮助!
标签: php symfony authentication silex