java - Spring 安全 OAuth 1.0a : providing already existing tokens

标签 java spring spring-mvc oauth

我想使用 Spring OAuth v1.0a 保护使用 Jersey 开发的简单 REST Web 服务,但我对此有疑问。首先,有一个简单的疑问:我发现了一些涉及Spring-MVC的示例,是否必须包含它?由于我试图使我的应用程序尽可能轻量,因此如果我可以将 Spring-MVC 排除在外,那就太好了。

除此之外,我最大的问题是关于 token 处理,特别是处理导致用户访问 OAuth 保护区的步骤。据我了解,尝试访问 protected 区域会自动触发 token 生成过程,从创建未经授权的请求 token 开始。不幸的是,这个工作流程不符合我的需求,因为我必须处理的场景涉及已经拥有授权访问 token 的用户,并且只需要提供它即可获得对 protected 资源的访问权限。是否可以通过 token 检索(例如从 POST/GET)和验证过程来覆盖 token 生成机制? 非常感谢您的努力。

编辑:(试图更清楚地解释事情)

假设这是我的 XML 中描述我的资源的部分:

<oauth:resource id="OAuthExperimentsRestrictedArea"
                    key="thisIsExactlyTheConsumerKey"
                    secret="...andThisIsExactlyTheSecret"
                    request-token-url="http://localhost:8080/OauthExperiments/oauth/request_token"
                    user-authorization-url="http://localhost:8080/OauthExperiments/oauth/confirm_access"
                    access-token-url="http://localhost:8080/OauthExperiments/oauth/access_token" />

我真正无法理解的是,如果我拥有已经有效的访问 token ,我应该如何或在哪里传递它。通过尝试通过不提供任何 token 的简单直接链接直接访问资源,我的应用程序将开始 token 创建过程,首先将我重定向到 request-token-url,然后是 user-authorization-url,最后重定向到 access-token-url 。我需要实现的是,当我已经有一个有效的 token 时,可以跳过此步骤,但我缺少的是如何做到这一点,在哪里传递 token (是否有默认的 bean?我应该将其传递为具有特定名称的参数?)。 我的目标是能够委托(delegate)甚至外部服务进行 token 验证,因此我最终试图找到的是此类过程的某种 Hook 。我希望我已经足够清楚地解释了整个场景。

最佳答案

这是 2 个问题?

  • 不需要 Spring MVC 来保护资源(这都是通过 Servlet 过滤器实现的 Spring Security)。

  • 第二个问题是,如果您拥有有效的访问 token 并且作为消费者想要发送有效的请求并访问 protected 资源,该怎么办。如果请求已获得授权,则无需生成新 token 。

第二个问题的答案是您需要填充 OAuthSecurityContext(通过由 OAuthSecurityContextHolder 管理的本地线程)。显然,完成后您需要小心清除它。通常,此上下文由过滤器 (OAuthConsumerContextFilter) 填充,因此您可以查看它如何管理上下文并复制它。我不能说我很喜欢这个模型,但这就是它的实现方式(OAuth2 实现在 1.0 之前的很长一段时间内发生了变化)。

关于java - Spring 安全 OAuth 1.0a : providing already existing tokens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290267/

相关文章:

java - 从 Java 8 迁移到 Java 11。在运行时,是否可以从 Java 8 中编译的库中的类文件访问 JDK 内部 API?

java - 在 IntelliJ 中使用 Java 调试器时, "Drop Frame"是什么意思?

java - 从 JBoss 中的 servlet 访问 Spring bean

Spring vs EJB(优缺点)

java - Spring ResponseBodyEmitter 和 SseEmitter 卡住了初始化和累积 earlySendAttempts

java - HTTP状态500-servlet mvc-dispatcher的Servlet.init()抛出异常

java - spring-boot 执行 org.springframework.boot :spring-boot-maven-plugin:1. 4.0.RELEASE:repackage 时缺少必需的类

java - 在Java中使用JLabel创建背景后无法将其他组件添加到窗口

java - 以编程方式加载 Spring 3.1 中的属性

java - 如何打印 json 对象和数组值?