将 OpenID (RPX)(可能还有 OAuth)用于 RESTful Web 服务

Posted

技术标签:

【中文标题】将 OpenID (RPX)(可能还有 OAuth)用于 RESTful Web 服务【英文标题】:Using OpenID (RPX) (and maybe OAuth) for a RESTful web service 【发布时间】:2010-12-19 08:37:50 【问题描述】:

如何将 OpenID 与 RESTful Web 服务结合起来?

我正在从事的个人项目是使用 RPX SaaS 来做 OpenID。这样做的关键结果是描述登录用户的 URL。该应用程序本身大量使用 javascript,我计划使用 REST api 与后端进行通信以进行数据库持久性和空间处理。

此应用程序的安全要求并不高。我想知道哪个用户正在发出请求。我认为我不需要使用 SSL 来对数据保密,并且我不希望运行 SSL 的开销。

我正在使用 Spring,如果可能的话,我想使用 Spring Security (Acegi),但我并不认同这个想法。

选项:

    将 OpenID URL 返回给 Javascript 应用程序,使用它为用户检索资源列表,然后按 id 检索/保存/等这些资源。

    创建一个会话表,将 OpenID URL 与随机会话令牌连接起来。将令牌返回给 Javascript 应用程序,然后该应用程序必须在每个后续请求中返回令牌。

    将选项 2 中的会话用作 OAuth 的消费者令牌等。最初,会话将使用 PKI 加密发送到应用程序。

    依赖 J2EE HTTP 会话。

在这些选项中,我倾向于选项 2。劫持会话会很困难,因为攻击者必须猜测会话 ID,而且我不认为应用程序需要防止嗅探。选项 3 与选项 2 基本相同,但会话 ID 不可用于嗅探。选项 4 将 OpenID URL 放入服务器的内存中,并导致 REST 旨在避免的所有可伸缩性问题。

感谢您对此进行任何讨论。

【问题讨论】:

【参考方案1】:

所以,2 年 3 个月后,我可以回答我自己的问题。我为我的个人项目实现了这个,我已经为我的雇主单独实现了它。

加入 Spring Security 是最好的方法。您可以选择使用预认证流程,但您可能会发现 CasAuthenticationFilter(和 CasAuthenticationEntryPoint)工作得更好,因为它们拥有您需要的大部分流程。

【讨论】:

以上是关于将 OpenID (RPX)(可能还有 OAuth)用于 RESTful Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

将 openID 和 oauth 集成为网站登录、登录和认证系统

OAuth & OpenID & SAML 工作流程梳理对比

入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 MVC认证与授权

安全存储 OpenID 标识符和 OAuth 令牌

托管应用程序的 Google 联合登录 (OpenID+Oauth) - 更改端点?

托管应用程序的 Google 联合登录 (OpenID+Oauth) - 更改端点?