实现令牌认证
Posted
技术标签:
【中文标题】实现令牌认证【英文标题】:Implementing a token authentication 【发布时间】:2011-06-03 02:20:24 【问题描述】:在我的网页中实施令牌身份验证必须遵循哪些步骤?
任何摘要或链接将不胜感激。
我想实现类似于 Facebook 或 Google,第一次客户端登录并接收令牌,然后在接下来的操作中使用它。 我还阅读了有关 OAuth 的信息,但我不想让第三方访问我的应用程序。
感谢您的长时间回复,我似乎很清楚我需要阅读更多相关信息。
我想要了解实现使用令牌身份验证的基本 Web 应用程序的“步骤”。即用户登录一次,然后可以进行一些操作:添加内容、编辑等。
我知道我在说什么类似于会话,其中服务器在 html 标头上添加一个 SESSION_ID,随后的请求被识别并与该会话相关联。我阅读会话的方式不好扩展,所以我想在他们去 OAuth 之前实现一个类似的系统,比如 gmail 或 facebook。可能我在谈论类似于 oauth 的东西(我没有深入阅读),但是用两条腿代替三腿。
【问题讨论】:
【参考方案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 的书,你可以看看它是否有关于身份验证的章节。可能那里的事情比这里解释得更好:-)
有些框架能够进行这种身份验证。出于安全原因,在实现自己的东西之前先检查它们是有意义的。
【讨论】:
【参考方案2】:你应该考虑你的需求,选择一个合适的协议和一些体面的软件来实现它。
如果没有更多细节,真的很难说更多:
您是在谈论一个或多个 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。
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 @987654327 @)。
【讨论】:
以上是关于实现令牌认证的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌
Laravel 通过 Passport 实现 API 请求认证:令牌作用域详解
Laravel 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)