实现令牌身份验证

时间:2011-01-03 22:14:11

标签: authentication token http-token-authentication

我必须遵循哪些步骤才能在我的网页中实施令牌身份验证?

任何摘要或链接都将受到赞赏。

我希望实现类似于Facebook或Google,首次客户端登录并接收令牌,然后在下一步操作中使用它。 我还阅读了关于OAuth但我不想从第三方访问我的应用程序。


感谢您的长期回应,我似乎很清楚我需要了解更多相关信息。

我想要知道实现使用令牌身份验证的基本Web应用程序的“步骤”。那就是用户记录一次然后可以做一些动作:添加内容,编辑等等。

我知道我所说的与会话相似,其中服务器在HTML标头上添加了一个SESSION_ID,后来的请求被识别并与该会话相关联。我读过会话方式不好扩展所以我想在进入OAuth之前实现类似gmail或facebook的系统。可能我说的是类似oauth的东西(我没有深入阅读)但是两条腿而不是三条腿。

2 个答案:

答案 0 :(得分:7)

您应该考虑您的要求,选择合适的协议以及实现它的一些体面的软件。

如果没有更多细节,很难说更多:

  • 您在谈论一个或多个Web应用程序的身份验证吗?你需要在不同的网络应用程序之间进行单点登录吗?
  • 是否应将所有用户数据存储在您的服务器上,或者用户是否应该能够登录,例如使用谷歌帐户?
  • 令牌应该包含有关用户的信息吗?
  • 您的应用程序在哪个平台上开发?
  • 应该使用哪种身份验证方法?
  • 你想实现门户吗?

有许多协议和工具可能符合或不符合您的要求:

http://en.wikipedia.org/wiki/Category:Authentication_methods

http://en.wikipedia.org/wiki/Category:Identity_management_systems

我个人喜欢CAS(http://www.jasig.org/cas)用于多个Web应用程序之间的基于令牌的SSO。它是基于Java的,但也有一些PHP和.Net的支持。

OpenID很好,如果你想允许用户使用他们的谷歌,雅虎,任何帐户(可配置...)登录,并且不想自己存储用户信息。

如果您希望为企业内部网应用程序集成windows-sso,那么Kerberos / SPNEGO就是您的选择。

对于大学申请,SAML / Shibboleth可能是最好的。在大学之外,它不太受欢迎,可能会导致它是一个相当复杂的协议。

哦,我几乎忘了:大多数Web框架/标准都有自己版本的普通“基于表单的身份验证”。用户访问登录表单时输入其用户名和密码。两者都有或没有SSL传输到Web /应用程序服务器。服务器根据某种数据库对其进行验证,并向用户提供cookie,每次用户发送请求时都会传输和验证cookie。但除了所有这些闪亮的协议之外,这似乎很无聊: - )

在使用网络身份验证做任何事情之前,您可能会考虑一般的网络安全(http://journal.paul.querna.org/articles/2010/04/11/internet-security-is-a-failure/ http://www.eff.org/files/DefconSSLiverse.pdf)以及您可以采取哪些措施来避免在您的网站上造成更糟糕的情况({ {3}} http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html)。

答案 1 :(得分:1)

明白你的观点。

在协议级别上,一种非常简单的令牌方法是HTTP基本身份验证。但这通常不合适,因为没有退出功能等。

自定义,简单的基于cookie的方法可以是这样的:

  • 服务器生成某种秘密(难以猜测的值)
  • 当用户尝试访问受保护资源时,会将其重定向到登录表单
  • 成功验证后,他获得了一个cookie。此cookie包含三个值:用户名,时间戳和{username server-secret timestamp}的哈希值。
  • 对每个用户请求,服务器重新计算哈希值并将其与客户端在其cookie中发送的值进行比较

(需要更多考虑:httponly和安全标志,传输层安全性,重放攻击等)

Amazon S3将其身份验证令牌存储在HTTP标头中,并使用HMAC进行计算。这里描述:http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?S3_Authentication.html(不一定建议与基于浏览器的Web应用程序一起使用)

如果您附近有任何关于REST的书,您可能会看一下它是否有关于身份验证的章节。可能事情比这里解释得更好: - )

有一些框架能够进行这种身份验证。出于安全原因,在实现自己的东西之前先检查它们是有意义的。

相关问题