我们有一个Springboot应用程序(比如microservice-a),我们需要添加一个带有OAuth2令牌的HTTP授权头来访问另一个microservice(比如microservice-B)。另外,据说我们可以通过向同一个microservice-B发送带有Grant\u类型、作用域和基本身份验证用户名和密码的HTTP POST请求来检索这个OAuth2令牌。
现在我的疑问是,我们是否有任何来自Spring security的现成支持,可以在该OAuth2令牌过期时自动从microservice-B检索该令牌,并发送后续HTTP请求。或者这根本不是必需的,我应该首先通过从microservice-a发送一个正常的HTTP POST请求来检索OAuth2令牌,然后发送后续请求。(这样,每当我想发送请求或保存令牌并在到期时检索它时,我可能必须检索OAuth2令牌)
Microservice-A是“客户端”Microservice-B是“资源服务器”
使用组织找到了解决方案。springframework。启动:spring-boot-starter-oauth2-client。以下是配置基于OAUTH2的WebClient所需的配置,该WebClient可以自动从auth server(Microservice-B)和access resource server(Microservice-B)获取OAUTH2令牌。
application.properties
oauth2.client.registration.pgw.scope=all
oauth2.client.registration.pgw.client-id=client
oauth2.client.registration.pgw.client-secret=secret
oauth2.client.provider.pgw.token-uri=http://localhost:8082/oauth/token
OAuth2Client配置。Java语言
@Configuration
public class Oauth2ClientConfiguration {
@Bean
public ReactiveClientRegistrationRepository getRegistration(
@Value("${oauth2.client.provider.pgw.token-uri}") String tokenUri,
@Value("${oauth2.client.registration.pgw.client-id}") String clientId,
@Value("${oauth2.client.registration.pgw.client-secret}") String clientSecret,
@Value("${oauth2.client.registration.pgw.scope}") String scope) {
ClientRegistration registration = ClientRegistration
.withRegistrationId(OAUTH2_CLIENT_REGISTRATION_ID)
.tokenUri(tokenUri)
.clientId(clientId)
.clientSecret(clientSecret)
.authorizationGrantType(CLIENT_CREDENTIALS)
.scope(scope)
.build();
return new InMemoryReactiveClientRegistrationRepository(registration);
}
@Bean
public WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
InMemoryReactiveOAuth2AuthorizedClientService clientService =
new InMemoryReactiveOAuth2AuthorizedClientService(clientRegistrations);
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager =
new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrations, clientService);
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
oauth.setDefaultClientRegistrationId(OAUTH2_CLIENT_REGISTRATION_ID);
return WebClient.builder().filter(oauth).build();
}
}
然后我们可以访问使用这个WebClient bean向资源服务器发送HTTP请求,资源服务器将负责获取和管理OAUTH2令牌
webClient.get().uri("http://localhost:8080/api/private").retrieve().bodyToMono(String.class).block();
我正在阅读这个教程页面:https://javaee.github.io/tutorial/security-intro006.html这解释了我应该可以通过以下网址查看主页(index.html)的SSL版本:https://localhost:8181。但是,当我将浏览器指向这个地址时,我收到一个错误,如图1所示。 我觉得第一次配置这个可能需要几个小时。有没有人有教程可以帮助我在Glassfi
问题内容: 我们已经设置了OAuth2授权服务器,因此我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security- oauth/wiki/oAuth2#resource-server-configuration 应该
我们已经设置了一个OAuth2授权服务器,所以我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security-oauth/wiki/oauth2#资源-服务器-配置 应该指向令牌处理bean。然而,令牌处理似乎是由服务器
试图让UserDetailsService为我设置的oauth2资源服务器工作。我能够成功地对jwt进行身份验证,但是我所做的一切似乎都无法让它调用loadUserByUsername方法。它最初使用的是SAML,并且可以工作,但现在我切换到了Oauth2,我无法让它工作。 我在google上发现,我只需要用@service将类注册为bean,spring就会把它捡起来,但它不起作用。我还尝试通过
如何使用spring oauth2和DB实现资源服务器和身份验证服务器,以及如何使用以下模式:https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql 测试数据会很棒!!!
我需要了解在我的项目范围内使用autheorizaion服务器的便利性。 我们正在实现我们的服务并将其部署到客户环境中。 客户基础结构已经提供了一种身份验证机制,以便对用户进行身份验证。 此机制拦截所有通信并将用户重定向到“登录”表单。 之后,用户被重定向到我们的服务,我们必须处理和消化它,并使用JWT令牌进行响应。 这是我感到迷茫的地方: 我在想: 使用Spring oauth2 向授权服务器请