实现令牌认证

4

如何在我的网页中实现令牌认证?

如果有摘要或链接,将不胜感激。

我想要实现类似于Facebook或Google的方法,即首次客户端登录并接收令牌,然后在下一步操作中使用它。我也了解OAuth,但我不想让第三方访问我的应用程序。


感谢您的长篇回复,对我来说似乎很清楚,我需要更多地阅读这个。

我想知道实现使用令牌认证的基本Web应用程序的“步骤”。用户登录一次,然后可以执行某些操作:添加内容、编辑等。

我知道我所说的与会话类似,其中服务器在HTML标头上添加SESSION_ID,然后请求被识别并与该会话相关联。我读到会话方式不利于扩展,因此我想要实现类似于gmail或facebook在转向OAuth之前的类似系统。可能我在谈论类似于OAuth(我没有深入阅读),但使用两个腿而不是三个腿。

2个回答

7

您应该考虑您的需求,选择一个合适的协议和一些实现它的好软件。

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

  • 您是在谈论单个还是多个Web应用程序的身份验证?您需要不同Web应用程序之间的单点登录吗?
  • 所有用户数据都应存储在您的服务器上,还是用户可以使用Google帐户登录?
  • 令牌是否应包含有关用户的信息?
  • 您的应用程序在哪个平台上开发?
  • 应使用哪种身份验证方法?
  • 您想实现门户吗?

有很多协议和工具可供选择,可能或可能不符合您的要求:

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。

如果您想允许用户使用其Google、Yahoo或其他账户(可配置...)登录,并且不想自己存储用户信息,则OpenID很好。

如果您想为公司内部网络应用程序实现集成的Windows SSO,则Kerberos / SPNEGO是最佳选择。

对于大学应用程序,SAML / Shibboleth可能是最好的选择。在大学以外,这种协议似乎不太流行,可能因为它是一个相当复杂的协议。

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

在进行网络身份验证之前,您可能需要花一点时间考虑一下网络安全(http://journal.paul.querna.org/articles/2010/04/11/internet-security-is-a-failure/ http://www.eff.org/files/DefconSSLiverse.pdf),以及可以采取哪些措施来不使您的网站安全状况更加恶化(http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202010.pdf)。


1

我理解你的观点。

在协议层面上,一种非常简单的令牌方法是HTTP基本身份验证。但这通常不适用,因为没有注销功能等。

例如,一种自定义的简单基于cookie的方法可以如下:

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

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

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

如果你身边有一本关于REST的书,可以看看里面是否有关于认证的章节。那里面的解释可能比这里更好理解 :-)

有一些框架可以实现这种类型的认证。出于安全考虑,在自己实现之前最好先检查它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接