【问题标题】:Spring security authentication for external applications外部应用程序的Spring安全认证
【发布时间】:2014-04-11 18:17:40
【问题描述】:

我有一些基于此线程的后续问题:

Spring security authentication based on request parameter

所需的流程是:

  1. 外部服务已在我的应用程序中注册,并拥有我的应用程序提供的消费者密钥和秘密。

  2. 外部服务通过传递消费者密钥和秘密向我的应用程序发送令牌请求。

  3. 我的应用程序对消费者密钥和秘密进行身份验证并提供令牌(具有到期时间)。

  4. 外部应用程序为我的应用程序验证的后续请求发送令牌(可能使用上述链接中的方法)。

流程看起来类似于 OAuth 1,但我不希望向用户(如 Facebook 或 Twitter)显示登录和访问权限页面。用户必须在幕后进行身份验证。

除了编写用于令牌处理和身份验证的代码之外,Spring Security 中是否还有其他可用选项来解决这个问题?

我还希望为应用程序的直接用户保留现有的基于表单的登录信息。

提前致谢。

【问题讨论】:

  • 你的问题不是很清楚。在您想要的流程中,您只谈论对预先注册的服务进行身份验证,然后您会谈论在幕后对“用户”进行身份验证。什么用户?他们与服务有什么关系?既然 Spring Security 已经支持它,为什么不直接使用 OAuth2?像客户端凭证授权这样的东西适用于访问资源的外部服务。
  • @Luke,很抱歉有歧义。我所指的“用户”是指按注册的第三方服务的用户。在我的应用程序对服务使用者密钥和秘密进行身份验证并将令牌返回给它之后,服务会发送另一个带有令牌和用户名的请求,以从我的应用程序中检索配置文件信息。不得向该用户提供登录表单以输入其凭据。如果服务经过身份验证,则假定用户也经过身份验证。任何拥有有效令牌的人都可以向我的应用程序发送请求。

标签: authentication oauth spring-security


【解决方案1】:

这看起来像是一个 2-Legged OAuth 流程,其中请求令牌是预先认证的,而不是由用户明确认证的。

您可以使用 Spring Security OAuth 来实现这种流程。看看 OAuth 2 的实现:

http://projects.spring.io/spring-security-oauth/docs/oauth2.html

或者,您也可以修改 OAuth 1.0 实现以正确支持 2-Legged 流程。我整理了一篇文章,解释了如何修改 Spring OAuth 1.0 实现以实现真正的 2-Legged 流程(他们的 2-Legged 流程实际上是 0-Legged 实现):

http://codehustler.org/blog/spring-security-tutorial-2-legged-oauth-1-0/

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2015-03-21
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多