当前位置: 首页 > 知识库问答 >
问题:

将用户重定向到oauth2授权服务器以获取令牌Spring Boot

冉锋
2023-03-14

我有2个应用程序运行,一个是资源服务器,我有需要认证的信息,以查看文本。然后我有授权服务器提供令牌。现在我可以使用postman或Insomnia,添加auth_url、token_url、client_id、client_secret并获得令牌。我将令牌添加到header,并使用header向资源服务器执行get请求,它工作得很好。

我想被重定向到:

本地主机:9001/登录

我用inmemory用户登录,然后它将我重定向回localhost:9000/home,我看到消息。

@SpringBootApplication
@RestController
@EnableResourceServer
@EnableOAuth2Client
public class SampleResourceApplication extends ResourceServerConfigurerAdapter {
        @Override
    public void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**").hasRole("user")
                .anyRequest().authenticated();
    }

    @Bean
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }

    public static void main(String[] args) {
        SpringApplication.run(SampleResourceApplication.class, args);
    }

    @RequestMapping("/home")
    public String home() {
        return "this is home";
    }

}

我的属性看起来像:

server:
  port: 900
security:
  oauth2:
    client:
      client-id: foo
      client-secret: foosecret
      access-token-uri: http://localhost:9001/auth/oauth/token
      user-authorization-uri: http://localhost:9001/auth/oauth/authorize
      grant-type: USER
      auto-approve-scopes: true
    resource:
      user-info-uri: http://localhost:9001/auth/user

共有1个答案

皇甫文乐
2023-03-14

让我们分开代理:您有用户(即您,也称为资源所有者)、授权服务器、资源服务器和客户机(访问您的URL的应用程序,即您的浏览器)。

通常情况下,这种情况发生在你的情况下:

  1. 当您的客户端访问资源服务器时,它会收到401。根据您的实现,您还可以直接将客户端重定向到您的AS(使用简单的重定向响应)。
  2. 您的AS提示您输入凭据。在验证它们之后,它为您发出一个令牌。然后可以使用此令牌访问RS.

编辑:重定向的结果代码是什么。

当您进入configure时,首先检查用户是否经过身份验证。如果他是,那么一切都好,但如果他不是,你必须抓住这个事件并开始你的重定向。这可以使用链接HTTPexceptionhandling方法完成:

public void configure(HttpSecurity http) throws Exception {
    http.antMatcher("/**")
            .authorizeRequests()
            .antMatchers("/", "/login**").hasRole("user")
            .anyRequest().authenticated()
    .and()
            .exceptionHandling()
                .authenticationEntryPoint(authenticationEntryPoint());
}

private AuthenticationEntryPoint authenticationEntryPoint() {
    return new AuthenticationEntryPoint() {
        // You can use a lambda here
        @Override
        public void commence(HttpServletRequest aRequest, HttpServletResponse aResponse,
               AuthenticationException aAuthException) throws IOException, ServletException {
            aResponse.sendRedirect(MY_AS_URL + "?redirect_uri=localhost:9001/home");
        }
    };
}
 类似资料:
  • 我使用spring-security-oauth2-authorization-server(版本0.2.0)来实现我的授权服务器。我希望用户角色在令牌中,是否可以添加它们?喜欢 谢谢

  • 我通过spring security oauth2实现了oauth2授权服务器,并使用来存储访问令牌,然后我需要为当前访问令牌提供控制器,以便oauth2客户端获取用户信息, 如下: 但我不知道如何获取用户信息?

  • 我正在尝试允许第三方应用程序(Google Home)访问AWS Cognito用户池中的信息。 整个流程如下(假设我理解正确): 用户试图将他们的设备(都在各种AWS服务中管理)链接到Google Home。 然后用户被重定向到我们的oauth2页面,在那里他们登录到cognito用户池中的帐户 他们成功登录并获得oauth令牌 Google Home应用程序可以使用该令牌向我们的后端发送请求,

  • 我试图用oauth2和jwt为我的API添加安全性。所以目前我可以使用以下命令并获得访问令牌。curl客户端:secret@localhost:8080/oauth/token-d grant_type=password-d username=user-d password=password 显然,我不打算为每个用户调用它))我的问题是在哪里调用这个命令?我应该创建像“localhost:8080

  • 我在下面设置Spring配置: 和Maven设置如下:

  • 问题内容: 我有一个配置有注释的资源服务器,它通过参数引用授权服务器,如下所示: 授权服务器/用户端点返回其扩展名,例如带有电子邮件: 每当访问某些资源服务器端点时,Spring都会通过调用授权服务器的/user端点来验证幕后的访问令牌,并且实际上会获取丰富的用户信息(其中包含例如电子邮件信息,我已经使用Wireshark进行了验证)。 所以问题是,如何在不显式第二次调用授权服务器端点的情况下获取