问题标签 [spring-security-oauth2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7837 浏览

java - Spring Security OAuth2 简单配置

我有一个简单的项目,需要以下简单的配置:

  • 我有一个“密码”grant_type,这意味着我可以提交用户名/密码(用户在我的登录表单中输入),并在成功时获得一个 access_token。
  • 使用该 access_token,我可以请求 API 并获取用户的信息。

我知道 API 的 URI,我不想要任何巨大的东西(我在https://github.com/spring-projects/spring-security-oauth/tree/master/samples上看到了配置),而且看起来很大。

我可以这样想:

  • 执行一个简单的 HTTP 请求,提供 *client_id* 、 *client_secret* 、 *grant_type=password* 、用户名密码(用户提供)。
  • 我在 JSON 响应中收到 *ACCESS_TOKEN*(和其他一些东西)。
  • 我使用 *ACCESS_TOKEN* 来查询 URL(使用简单的 GET 请求),这将提供用户的信息。
  • 我在 HttpSession 中设置信息并认为用户已登录。

它可以在 2 个 HTTP 请求中完成。我只是不想这样做,而是使用“更安全”的方式而不是 Spring Security OAuth2。

你能想到我需要做什么“简单”的配置来完成这项工作吗?

0 投票
0 回答
3629 浏览

java - Spring oauth2 - 具有基于 java 的配置的用户 id 的自定义 tokenEnhancer

我实现了一个restful API,并使用了spring security oauth和资源所有者密码凭证授权。我想避免在 API 中使用会话,所以每次用户调用 API 时我都会从数据库中检查令牌。

当经过身份验证的用户调用 API(例如使用 URI GET /users)时,我需要从当前用户获取 userId 以使用我的业务服务。我的业务服务使用 userId 而不是 userName,并允许我检索当前用户信息或检查当前用户是否被允许执行某些操作。

目前,我将用户名与令牌(跨JdbcTokenStore)一起存储。所以我可以每次使用存储的用户名从数据库中检索用户 ID。但是这个解决方案太重了,它迫使我在使用对性能来说太糟糕的服务之前访问数据库两次(对于令牌和用户)。

因此,为了解决这个问题,我想将 userId 与令牌一起存储。使用这个解决方案,当我从数据库中获取令牌时,我拥有当前的 userId,我可以直接用这个来调用服务。

问题是我无法成功将自定义令牌增强器设置为默认令牌服务。

这是我在扩展 OAuth2ServerConfigurerAdapter 的 securityConfig 中的实现:

这是tokenService()添加自定义令牌增强器的覆盖,但它不起作用:

有没有人有其他想法?

0 投票
4 回答
39914 浏览

spring-security-oauth2 - 如何更改 spring security oauth2 默认令牌端点?

我们有基于 spring security oauth2 的应用程序。每件事都运行良好。但我未能将默认令牌端点从“/oauth/token”更改为“/external/oauth/token”。

我的 spring-servlet.xml

但是当我访问这个端点时的结果是

我错过了什么吗?请建议。

0 投票
2 回答
24092 浏览

spring - 在 Spring Security OAuth2(提供者)中使用作用域作为角色

让我们考虑一个相当简单的假设应用程序,用户可以在其中阅读或撰写帖子。

一些用户可以阅读和撰写文章,而另一些用户只能阅读它们。使用 Spring Security (3.2.1),我通过具有 2 个角色来建模:

  • ROLE_WRITE:此角色授予用户撰写帖子的权限。
  • ROLE_READ:此角色授予用户阅读帖子的权限。

使用 Spring 安全性实现这一点非常简单......

现在,我还想通过使用Spring Security OAuth (version 2.0.0.M3 ATM)实现 OAuth2 提供程序来允许第三方应用程序代表用户读取和写入帖子。

在授权步骤中,应用程序会询问用户是否愿意授予他们代表他们阅读和/或撰写帖子的权利。这里的用户在这里授予范围(不是角色)。

然后,当 OAuth2 使用者调用我的 REST API 时,Spring Sec OAuth 授权授予的令牌并创建一个身份验证,其中包含用户及其所有角色和仅授予的范围。

问题(和问题)是我现在必须编写不同的安全逻辑,具体取决于 API 是由通常经过身份验证的用户调用(只需检查角色)还是通过 OAuth2 调用(检查角色+范围)。

是否可以在 Spring Security OAuth2 中“合并”角色和范围的概念,以便在授权步骤期间,用户授予应用程序他们拥有的角色的子集(并且 OAuth2 身份验证仅在授予的权限中报告这些) ? 这样当第 3 方应用程序进行 API 调用时,身份验证中的角色是授予的角色吗?这样我就不必编写任何 OAuth2 特定的安全逻辑。

0 投票
1 回答
4361 浏览

spring-security-oauth2 - 用于 Postgres 的 Spring Security Oauth2 SQL 模式?

我打算使用:JdbcTokenStore.

据我所知,它使用两个表:oauth_access_tokenoauth_refresh_token

我可以对表结构进行逆向工程;目前还不清楚是否有从一个表到另一个表的引用,我应该为其创建外键吗?

某处是否有特定于 postgres 的架构?或者我可以参考的另一个模式?

例如,批处理在其 dist 中包含模式。我想知道 Oauth2 是否也可以这样做?

非常感谢,马特

0 投票
2 回答
6595 浏览

spring - OAuth2 是否允许使用非密码或自定义凭据进行授权?

我正在使用 Spring Security OAuth2。客户端应用程序(我们拥有的)发出一个“密码”授权请求,该请求传递用户的用户名和密码。就像草案规定的那样。

我需要这种机制来支持其他类型的凭据,例如卡号、PIN,甚至是预认证的、不需要密码的授权。

请记住,这些请求仅由特权 client_id 允许,该特权仅在我们拥有的应用程序中使用。

0 投票
2 回答
9704 浏览

oauth-2.0 - Spring security oauth 2 和客户端凭据流

我正在尝试实现一个简单的客户端凭据流 spring-security-oauth2 api。我试图改编 sparklr 和 tonr 的例子,但没有成功。我还尝试遵循此线程的代码:Spring-security context setup for 2-legged (client credentials) OAuth2 server但它似乎不适用于我。有人可以给我看一个例子或帮助我完成这项工作。

sparklr 应用程序中的spring-servlet.xml

tonr 应用程序中的spring-servlet.xml

尝试在 sparklr 应用程序上验证 tonr 应用程序时出现以下错误:

HTTP 状态 500 - 请求处理失败;嵌套异常是 error="access_denied", error_description="请求访问令牌时出错。

我希望有一个人可以帮助我。谢谢

0 投票
1 回答
13648 浏览

java - Spring Security OAuth2授权流程

谁能告诉我应该依次调用哪些 http GET 或 POST 方法以授权我的 apache cxf Web 服务并访问资源?我试着打电话:

我能得到的只是令牌响应:

但是我得到这个令牌后的下一步是什么?如何对用户进行身份验证并访问 url /resources/MyResource/getMyInfo 中的资源,这需要具有角色 ROLE_USER 的用户?谢谢。

我有以下servlet 配置:

web.xml:

更新: 在这里找到工作示例http://software.aurorasolutions.org/how-to-oauth-2-0-with-spring-security-2/可能对那些有类似问题的人有用

0 投票
1 回答
5909 浏览

spring - Spring Security Oauth2 资源所有者密码流:当我发送 REST 请求时,我的用户详细信息服务总是获取客户端 ID 而不是用户名

所以我试图向我的 oauth 服务器发送一个请求(没有标题):grant_type=password&username=blah&password=blah&client_id=blahblah。

我有 2 个身份验证管理器(一个用于客户端,另一个用于用户验证)。问题是,我的身份验证管理器都没有传递用户名进行验证。在这两种情况下,都使用 client_id 调用它们。我想要的是一个验证客户端,另一个验证用户。

我的bean配置是这样的:

这是我的 Web.XML

我的用户详细信息服务类

0 投票
1 回答
446 浏览

java - NPE AuthorizationServerEndpointsConfiguration$TokenRegistrar postProcessBeanFactory

我有一个使用 spring-security-oauth-2.0.0-M2 构建的应用程序,现在我正在尝试将其升级到 2.0.0.RC1。示例配置发生了显着变化,现在使用 java config。

我已将配置转换为 java config,但我遇到了这个错误。

4937) [tomcat-embed-core-7.0.47.jar:7.0.47] 在 org.apache.catalina.core.StandardContext.startInteral(StandardContext.java:5434) [tomcat-embed-core-7.0.47。 jar:7.0.47] 在 org.apache.catalina.util.LifecycleBase.start(Lifec ycleBase.java:150) [tomcat-embed-core-7.0.47.jar:7.0.47] 在 org.apache.catalina。 core.ContainerBase$StartChild。在 org.apache.catalina.core.ContainerBase$StartChild 调用(ContainerBase.java:1559)[tomcat-embed-core-7.0.47.jar:7.0.47]。调用(ContainerBase.java:1549)[tomcat-embed-core-7.0.47.jar:7.0.47] 在 java.util.concurrent.FutureTask.run(FutureTask.java a:262)[na:1.7.0_45]在 java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1145) [na:1.7.0_45] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615) [na:1.7.0_45]在 java.lang.Thread.run(Thread.java:

我的配置大多类似于示例 sprklr 配置

如您所见,我正在检查 configure(AuthorizationServerEndpointsConfigurer endpoints) 方法上的空值,一切似乎都很好,但不知何故 AuthorizationServerEndpointsConfiguration$TokenReg istrar 中的注册表从未设置。

(取自 spring security oauth 代码)