问题标签 [spring-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 投票
2 回答
2918 浏览

spring - 客户端、身份验证服务器和注销

所以,我有一个独立的 OAuth2 身份验证服务器和客户端应用程序(基于 Web),都使用 Spring OAuth2。

我在 Auth 服务器上有一个登录表单主机,使用 Spring 设置(通过登录表单)从客户端应用程序重定向等。

到目前为止一切都很好。

我在客户端上添加了一个注销设置:

这一切“似乎”都很好。

但是,如果我然后点击我的客户端上的“登录”链接,当它重定向到授权应用程序时,我没有得到登录屏幕,而只是发生了重定向握手,我又回到了客户端应用程序中。

所以,问题是,当我在客户端应用程序上注销时,需要在 Auth 服务器中“清除”什么?会话信息以某种方式保留在身份验证应用程序上,但是当我点击登录时,我无法找到该会话是如何被拾取的?是否有一种干净的方法可以将“注销”传播到 Auth 服务器?

非常感谢

马丁

0 投票
0 回答
1782 浏览

java - Spring OAuth 2.0 - 单元测试 OAuth 2.0 客户端配置 (AuthorizationCodeResourceDetails)

我正在使用 spring-oauth 2.0 库创建一个 OAuth 2.0 客户端,我可以使用该客户端从正在运行的 OAuth 2.0 授权服务器获取和访问令牌。客户端配置如下:

现在,我正在尝试对这个配置进行单元测试。单元测试如下:

但是,当我运行测试时,出现异常:

有什么方法可以测试使用“authorization_code”授权类型的 OAuth 2.0 客户端?

0 投票
1 回答
496 浏览

spring - 以编程方式从 Spring OAuth 2.0 授权服务器获取授权码

我正在尝试使用简单的 CURL 命令从 Spring OAuth 2.0 授权服务器获取授权代码。

但是,我没有返回带有代码的重定向 URL,而是返回对登录 URL 的 302 重定向响应。由于我已经在 Authorization Header 中发送了用户名、密码,有没有办法跳过登录页面重定向并直接获取授权码?

0 投票
1 回答
1614 浏览

spring - 在 Spring OAuth2 中禁用确认页面

我正在通过分解此 GitHub 链接上的三个互连示例应用程序集来研究 Spring OAuth2 。这些应用程序在我的 devbox 上按预期工作,但该authserver应用程序会生成一个不需要的确认页面,要求用户确认他们授权客户端localhost:8080/login接收其受保护的信息。确认页面截图如下:

需要对authserver应用程序的代码进行哪些特定更改才能删除确认步骤?

我了解确认页面在某些用例中可能很有用。但是确认页面不适合我想到的用例,那么我该如何禁用这一步呢?


第一次尝试:


我已经找到了授权页面的查看代码authorize.ftl,您可以通过单击此链接阅读。但是当我Ctrl-H在 Eclipse 工作区中搜索“authorize.ftl”时,没有显示任何结果。同样,我查看了Spring OAuth2 开发人员指南。指南中提到了创建一个单独的@RequestMappig("/oauth/authorize"),但似乎不清楚如何禁用此确认步骤。

模板login视图的代码位于login.ftl,您可以在此链接中阅读

解决方案是简单地将login.ftl代码移动到一个新login.html文件中,然后使用 管理该视图@RequestMappig("/oauth/authorize")吗?

如果我正确解释了上面的开发人员指南链接中的工作,似乎是说

1.)@RequestMappig("/oauth/authorize")链接到 GET 的方法将提供登录视图,然后是另一个@RequestMappig("/oauth/authorize")

2.) 然后@RequestMappig("/oauth/authorize")链接到 POST 的另一种方法将从视图中获取信息并绕过确认步骤。

但是这在代码中会是什么样子? 如果我理解正确,这是一个起点:

我在方法中放了什么?然后我放了视图代码吗?

开发人员指南说从 开始WhiteLabelApprovalEndpoint,java,您可以在 GitHub 上的此链接上阅读

0 投票
1 回答
1651 浏览

spring - 如何覆盖这个 `/error` 端点?

我正在通过在 GitHub 上分解这三个相互关联的应用程序来研究 Spring OAuth ,同时还仔细研究了此链接上的 Spring OAuth 2 开发人员指南开发人员指南说/oauth/error需要自定义端点,但是应该使用哪些特定代码来成功覆盖/oauth/error


第一次尝试:


我第一次尝试进行覆盖是抛出错误,您可以在调试日志中看到,我已通过此链接将其上传到文件共享站点

我首先尝试让 Spring 提供的代码元素在示例应用程序中工作。

authserver首先,我在上面的示例应用程序链接中为应用程序添加了一个新的控制器类,并添加了一些来自 Spring 的示例代码WhiteLabelErrorEndpoint.java,您可以在此链接中阅读。我的尝试如下:

通过复制此链接中的代码SpelView.java添加了上面链接使用的以下字符串处理程序类:

0 投票
0 回答
4337 浏览

oauth - 多个资源服务器 oauth2 客户端?Spring OAuth2 SSO

再会,

我已经设置了一个实现 SSO 和 API 网关模式的工作示例(类似于此处描述的内容https://spring.io/guides/tutorials/spring-security-and-angular-js/#_the_api_gateway_pattern_angular_js_and_spring_security_part_iv)。

该系统由独立的服务器组件组成:AUTH-SERVER、API-GATEWAY、SERVICE-DISCOVERY、RESOURCE/UI SERVER。

在 API-GATEWAY(使用 Spring Boot @EnableZuulProxy @EnableOAuth2Sso 实现)我配置了多个 OAuth 提供程序,包括我自己的使用 JWT 的 OAuth 服务器:

Java配置:

当未经身份验证的请求发送到网关时,请求会按预期重定向到 AUTH-SERVER,这里我提供使用我的 AUTH-SERVER 登录的选项以及上面配置的社交选项,方法是提供一个链接,该链接基本上需要用户返回要被上面配置的相关 OAuth 过滤器路径拦截的 API-GATEWAY。我的 AUTH-SERVER 发出 JWT 令牌按预期工作,为我的资源数据和 ui 提供服务,但是当我成功使用 Google 进行身份验证时,我从资源/ui 服务器收到以下响应:

然后我意识到这可能是由于资源服务器的 OAuth 配置?

资源服务器如何知道解码外部 OAuth 提供者发送的令牌?资源服务器可以配置多个OAuth2客户端吗?我在这里的想法有缺陷吗?

在调试对资源服务器的请求后,我在 org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter 类中发现了 Google 发送的令牌值:

令牌中似乎没有有效负载?

我还看到正在使用的验证器正在使用上面配置的 jwt 键值。

我将如何配置多个资源服务器 oauth 资源以及资源服务器如何知道要使用哪一个?

0 投票
2 回答
18985 浏览

spring - How to autowire this TokenStore

How do I trigger auto-logout of this sample Spring Boot OAuth2 app?

I tried adding the following code from an answer to this other posting into a new controller class in the demo package of the authserver app:

But when I try to launch the app, the debug log gives the following error indicating that it cannot autowire the token store:

When the compilation error is resolved, I intend to trigger the logout process from the following code which will be added to the hello.js controller of the ui app in the github link above:

The full code of the sample app is at the github link above, so what specific changes do I need to make in order to successfully autowire the token store and auto-logout the user globally?


ONGOING EFFORTS:


Per @ManoJ's suggestion, I changed the new controller class to become the following:

However, I am still getting a very similar error message when I try to launch the app at the terminal with mvn spring-boot:run, as follows:

Given that this class is the only addition to the sample app in the link in the first line of the OP above, all of the code for the entire app is available both online and on your own devbox with git clone .... So what else needs to change in order for autowire of the TokenStore to work properly?

0 投票
1 回答
9325 浏览

spring - 请求 'OPTIONS /logout' 与 'POST /logout' 不匹配

我正在通过分解这个 GitHub 示例中的三个相互关联的应用程序来研究 Spring Cloud 和 Spring OAuth2 。当我在应用程序中打开/oauth/revoke-token端点,然后从应用程序调用它时,应用程序的调试日志在拒绝注销请求时提供以下错误消息:authserveruihttp://localhost:9999/uaa/logoutauthserver

需要对示例 GitHub 应用程序中的代码进行哪些特定更改,以便在ui应用程序调用注销功能时使全局注销成功hello.js


初步努力:


到目前为止,我所做的更改包括:

将以下 @Bean 定义添加到AuthserverApplication.java

在应用程序的demo包中authserver添加以下控制器类:

app中的logout()方法改成如下: hello.jsui

但是,当用户点击浏览器中的注销按钮并触发对 的调用时http://localhost:9999/uaa/logout,应用程序的调试日志authserver会给出以下输出:

GitHub 示例应用程序中还需要更改哪些其他特定代码更改,以使ui应用程序能够触发用户从所有应用程序中全局注销?

注意:显然,/uaa/logout是一个不同于/oauth/revoke-token. 但是,如果没有对此 OP 的回答,Spring Security 和 OAuth 在这种情况下的内部工作原理并不清楚。


@StuXnet 的建议:


该请求的 Firefox 开发者工具网络选项卡的内容是:

http : // localhost:9999/uaa/login对with 方法的请求因错误OPTIONS而被拒绝403

原始request标题是:

原始response标题是:

接下来,我将 LoginConfig 的 config(http) 方法改为如下:

这导致 Spring Boot DEBUG 日志中出现以下新打印输出:

request以及Firefox 中的以下标头:

连同responseFirefox 中的以下标头:

然后我尝试将configure(http)方法更改LoginConfig为:

但结果是authserver应用程序的以下 Spring Boot DEBUG 日志:


在您的机器上重现问题:


要在您自己的机器上重现该问题,您可以:

1.) git clone OP顶部链接处的原始示例应用程序,然后进行如上所示的更改,或

2.) 下载应用程序的压缩版本,因为它存在于我的 devbox 中,包括此文件共享链接上来自 OP 的所有更改,然后:

2.a.) 解压应用程序。

2.b.) 将终端窗口导航到oauth2/resourcemvn spring-boot:run。然后导航到第二个终端窗口oauth2/authserver并键入mvn spring-boot:run. 然后导航到第三个终端窗口oauth2/ui并键入mvn spring-boot:run.

2.c.) 将网络浏览器导航到http : // localhost:8080,然后单击login,然后输入userforusernamepasswordfor password。通过身份验证后,单击logout按钮重现 403 错误。使用浏览器开发工具的网络选项卡检查浏览器活动。在运行应用程序的终端中查看 Spring Boot 日志authserver以查看 Spring 的活动。

3.) 将这三个文件夹作为现有的 maven 项目导入 eclipse(或另一个 IDE),或者使用文本编辑器打开代码文件进行编辑,然后在步骤 2 中重复重新启动和重新测试。

我还能提供什么来帮助隔离解决方案?

0 投票
1 回答
2762 浏览

spring - Spring Security OAuth2 JWT 匿名令牌

我做了什么

首先,我承认我缺乏春季安全知识。

我正在为我们的一种产品尝试安全的休息服务。我正在使用弹簧安全 OAuth2 JWT。我想允许匿名用户和注册用户访问我的资源。

假设我有一项服务http://localhost:8282/melayer/articles并且当我运行以下命令时

(1)。curl -X POST -vu melayer:12345 http://localhost:8282/melayer/oauth/token -H "接受: application/json" -d "password=melayer&username=melayer&grant_type=password&scope=write&client_secret=12345&client_id=melayer"

我能够接收 access_token、refresh_token 等。一切都很好,即使我可以使用接收到的 access_token 访问 url http://localhost:8282/melayer/ articles

(2)。curl http://localhost:8282/melayer/articles -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NjA3NzY5NDIsInVzZXJfbmFtZSI6ImVjb2tyeXB0IiwianRpIjoiNWI5ZmE4NjYtMTBlNS00NDA2LTgxYmMtYjM3NWVmNGE0ZmQ1IiwiY2xpZW50X2lkIjoiZWNva3J5cHQiLCJzY29wZSI6WyJ3cml0ZSJdfQ.4jO9euBz4TSSNh7M3l2YBD1QPblE0ZyOfGm4VtyFMFY"

我想了解的

我想匿名接收 access_token 即我不想传递用户名、密码或客户端密码,我想按以下方式运行 curl 命令

curl -X POST http://localhost:8282/melayer/oauth/token -H "接受:应用程序/json"

我担心的一个问题是,我想要使用或不使用用户凭据的 access_token 我从上周开始尝试实现这一目标,我错过了什么吗?可能吗 ?这样做的正确方法是什么?

这是一个很好的请求来帮助我:)

如果有人想查看我的代码,请参考 Git repo https://github.com/aniruddhha/spring-security-oauth2-jwt

0 投票
4 回答
21133 浏览

spring - 将自定义 UserDetailsS​​ervice 添加到 Spring Security OAuth2 应用程序

如何将以下自定义添加UserDetailsService到此Spring OAuth2 示例中

默认值user和默认值在应用程序的文件中password定义。 application.propertiesauthserver

但是,我想将以下自定义添加UserDetailsService应用程序demo包中以authserver进行测试:

如您所见,这UserDetailsService还不autowired是,它故意使用不安全的密码,因为它只是为了测试目的而设计的。

需要对GitHub 示例应用程序进行哪些特定更改,以便用户可以username=Samwise使用password=TheShireusername=Frodo使用登录password=MyRing 是否需要对AuthserverApplication.java其他地方或其他地方进行更改?


建议:


Spring OAuth2 开发人员指南说要使用a全局GlobalAuthenticationManagerConfigurer配置 a UserDetailsService。然而,谷歌搜索这些名字产生的结果并不那么有用。

此外,使用内部 spring security INSTEAD OF OAuth 的不同应用程序使用以下语法来连接UserDetailsService,但我不确定如何将其语法调整为当前 OP:

我尝试使用@Autowire内部OAuth2AuthorizationConfig连接UsersAuthorizationServerEndpointsConfigurer如下:

但是 Spring Boot 日志显示Samwise找不到用户,这意味着UserDetailsService没有成功连接。以下是 Spring Boot 日志的相关摘录:

我还能尝试什么?