4

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

任何摘要或链接将不胜感激。

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


感谢您的长时间回复,我似乎很清楚我需要阅读更多关于此的内容。

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

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

4

2 回答 2

7

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

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

  • 您是在谈论一个或多个 Web 应用程序的身份验证吗?您需要在不同的 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 很好,如果您想允许用户使用他们的 Google、Yahoo、任何帐户(可配置...)登录并且不想自己存储用户信息。

如果您想为您的公司 Intranet 应用程序集成 windows-sso,那么 Kerberos/SPNEGO 是您的最佳选择。

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

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

在对 Web 身份验证进行任何操作之前,您可能会考虑一下一般的 Web 安全性 ( 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)。

于 2011-01-04T00:04:13.613 回答
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 的书,你可以看看它是否有关于身份验证的章节。可能那里的事情比这里解释得更好:-)

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

于 2011-01-06T00:44:16.563 回答