我的网络服务器上有一个用 php 编写的 REST 服务。我想知道什么是最好的身份验证(除了基本的 http 访问身份验证)。 听说过token-based auth,想请问有没有人能解释一下主要步骤。
- 在 GET 上: token 发送是否可见? (那不是不安全吗?)
- 如何使 token 仅在特定时间有效?
- ...
客户端:安卓/浏览器;服务器:Apache,PHP5
最佳答案
这两种方式都可以,GET 请求中的值实际上并不比 POST 请求中的值更可见。如果任何人可以“看到”(即拦截)请求,他就可以看到您发送的所有内容。最后,一个 HTTP 请求只是一堆 HTTP header ,后面可能跟着一个正文。 URL 在第一个 GET/foo/bar HTTP/1.1
行中发送,其他值只是在不同的后续行中发送。
因此,您希望将身份验证 token 发送到哪里取决于您。您可以要求它是附加到每个请求的查询参数:
GET /foo/bar?user=123456&token=abcde...
要真正按预期使用 HTTP 协议(protocol),您应该使用 Authorization
HTTP header :
Authorization: MyScheme 123456:abcde...
此 header 的内容完全由您决定。它通常指定一种授权方法,如 Basic
,然后是您想要进行身份验证的任何内容。这可以只是用户名和密码、它们的哈希值、客户端在某个时候获得的不透明 token 或其他任何东西。
我建议使用 token 系统或请求签名系统,后者是首选。在请求签名系统中,客户端必须从您那里获取 token 。然后它发送此 token 的哈希值和请求的某些特征以验证请求,例如sha1( token + 时间戳 + 请求 URL + 请求正文)
。您的服务器可以验证这一点,而无需客户端在每个请求中以纯文本形式发送 token 。
How do I make the token only valid for a specific time?
您在服务器端保存带有过期时间戳的 token 并对其进行检查。
关于php - php中基于 token 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510703/