php - php中基于 token 的身份验证

标签 php authentication rest

我的网络服务器上有一个用 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/

相关文章:

javascript - 如何使用 $.Ajax 将 Windows 身份验证凭据传递给 Web API 服务

linux - 有没有办法使用 IAM 来管理开发人员对 EC2 实例的访问? (ssh 不是 ec2 api)

android - 返回 EntityUtils.toString(response) 的究竟是什么?

java - 使用 Spring 关闭端点

php - 如果没有添加文件,如何在 MySQL 数据库单元中插入 "Null"值?

php - 在 CSS 中设置 RSS 提要样式

swift - 是否可以从 SwiftUI 使用 ASWebAuthenticationSession ?

java - 如何获取 Spring Restful Web 服务中请求正文中发送的字符串?

php - 在 laravel 中获取与自身类的关系时出现非法偏移类型错误

php - 在 Laravel 中添加 Sitemap 文件和路由