【问题标题】:Can you recommend a way to generate access token?您能推荐一种生成访问令牌的方法吗?
【发布时间】:2013-06-06 02:56:34
【问题描述】:

我的团队正在编写一个 Web 应用程序,其中包括一个服务器和一个客户端,我认为显然不建议将用户的 uidpassword 发送到服务器的每个客户端请求。

我正在寻找一个很好的选择来处理这个问题,也许像Oauth,有没有有效的方法?

例如,用户名lyj和密码123456从我的客户端应用程序请求登录,服务器应检查是否允许,登录成功后,客户端可以发送更多请求从服务器获取其他资源. 我的问题是,除了用户名和密码,服务器和客户端之间有没有办法确定这个人是谁,有没有建议在服务器和客户端之间传输access token

【问题讨论】:

  • 需要更多关于后端的信息。

标签: oauth token access-token


【解决方案1】:

没有太多关于您的平台和技术的信息,我只能尝试一个通用的答案。根据您的使用方式,您可以通过多种方式生成令牌。 MD5 是一个完善的算法,您可以使用它来生成另一个令牌,使用用户名和电子邮件等。请记住,您无法解密 MD5 字符串。因此,要进行任何类型的验证,您必须使用原始参数重新创建字符串,然后执行检查。如果您想要一个可以反转的哈希,您可以查看 base-64 之类的内容。

MD6 和 base-64 都可以作为库在您可能使用的任何后端轻松获得。

* 更新

查看您正在使用无状态客户端的 cmets,这是使用令牌的一种可能方法。

  1. 客户端首次登录。 (最好是 HTTPS)

  2. 服务器使用(用户名+电子邮件+ip_address+time_stamp)使用MD5(或您选择的任何其他方式)执行验证并生成令牌并将其发送回客户端

  3. 服务器使用 userID 、 ip_address 和 time_stamp 在数据库的表中为此客户端创建一个新会话

  4. 客户端将此令牌传回以用于将来的任何请求。

  5. 当客户端传递令牌时,服务器从数据库中检索会话并生成 MD5 哈希,并将其与客户端发送的令牌进行比较。如果它是一样的,你很好。

  6. 您还可以使用时间戳值作为令牌的有效性窗口,这样它们就不会永远有效。除非有人可以同时创建相同的 MD5 哈希值,否则无法重新创建此令牌,只需几毫秒

【讨论】:

  • 有没有可能让别人拿到这个token然后模仿到服务器?
  • 如果他们使用完全相同的原始字符串组合来生成 MD5,那么是的,他们可以生成相同的令牌。但这不太可能。因为通常不可能通过查看 MD5 字符串来猜测原始字符串是什么。如果您真的想让它完全安全,您可能还想将时间戳字符串添加到 MD5 哈希中并存储此时间戳,以便稍后重新创建字符串。因此,您知道令牌何时进来,它是由您生成的!
  • 根据你的回答,客户端和服务端都应该存储一个secret token来生成md5 token,并且这个secret不需要随客户端的请求一起传输,以免被别人捕获?
  • 不确定您的意思。你能说得更详细一点吗?
  • 有没有可能让别人拿到http包,拿到access token,然后模仿到服务器?
【解决方案2】:

现代 Web 应用程序容器已嵌入会话跟踪功能。当然,总是有饼干的选择。实现什么取决于你...

【讨论】:

  • 由于http的无状态,我不想每次客户端请求时都传输用户名和密码。
猜你喜欢
  • 2018-04-17
  • 2020-08-11
  • 2014-03-07
  • 2017-06-22
  • 2018-11-10
  • 2023-04-04
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多