【发布时间】:2021-02-19 01:47:43
【问题描述】:
我正在使用 Laravel 4 为外部网站制作一个完整的 API,用于进行网络抓取。
目标站点有一个登录表单,因此每个请求都需要身份验证。
如果用户想要发布或查看某些内容,他会向我的服务器发出请求,然后再向目标服务器发出另一个请求,获取信息并将其编码为 JSON。
我的问题是如何在我的 API 请求中获取凭据?
现在我有类似http://myapi.local/login 的东西(这向http://externalsite.com/admin/login 提出请求),
POST 参数为 username=test&password=1234 并返回会话 ID
然后对于每个操作,我将会话 ID 附加到我的 api 请求中
http://myapi.local/posts/all?session_id=4D2FtE...
但这根本不是restfull,所以最好使用HTTP Basic Auth,即为每个请求进行一次登录
网址:http://myapi.local/posts/all
标题:Authorization: Basic dGVzdDoxMjM0
并在我的控制器中调用登录函数。
速度较慢,因为它每次向目标站点发出两次请求,但似乎更好,因为我不保存任何会话或凭据。
如何处理 Laravel 中的 Authorization 标头?解码 base64 然后拆分凭据?
有没有更好的方法来做到这一点?
谢谢!
【问题讨论】:
-
@Rafael 因为它是一个完整的 API,所以它是无状态的,没有会话,没有 cookie ;)
-
嗯,是的,我看到你可以使用 WWW-Authenticate 响应,例如
WWW-Authenticate: Basic realm="myRealm" -
@Rafael hmmm 我会尝试this,它使用普通 php (
$_SERVER['PHP_AUTH_USER']) 获取身份验证凭据,但我正在寻找内置的 Laravel 方式:P -
请记住,Auth Basic 使用的是 base64,因此您需要使用 SSL 保护 TCP 连接
-
另外,为了安全起见,您可能希望将 HTTP 请求连接标头设置为非持久性。如果您所做的只是发送信息包。这更安全。默认情况下,http 连接是持久的,这意味着套接字为连接保持打开状态。您应该仅在需要时关闭和打开套接字。