gpt4 book ai didi

java - 将用户重定向到 oauth2 授权服务器以获取 token Spring Boot

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:31 28 4
gpt4 key购买 nike

我有 2 个应用程序正在运行,一个是资源服务器,我在其中拥有需要身份验证才能查看文本的信息。然后我有提供 token 的授权服务器。现在我可以使用 postman 或 Insomnia,添加 auth_url、token_url、client_id、client_secret 并获得 token 。我将 token 添加到 header ,然后使用 header 向我的资源服务器发出获取请求,它工作正常。

现在我不知道如何直接从我的资源服务器实现重定向。就像我去的时候一样

localhost:9000/home

我想重定向到:

localhost:9001/login

我用内存中的用户登录,然后它会将我重定向回 l​​ocalhost:9000/home,我会看到消息。

实现用户访问 localhost:9000/home 上的信息的最佳方式是什么。您转到 localhost:9000/home,它转到 localhost:9001 上的授权服务器,您使用用户名和密码登录。批准授权,它会让您回到 localhost:9000/home,然后您可以看到文本,之前 protected 内容,因为您没有访问它的 token 。

资源服务器.java

@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. 当您的客户端访问资源服务器时,它会收到一个401。根据您的实现,您还可以直接将客户端重定向到您的AS(使用简单的重定向响应)。
  2. 您的 AS 会提示您输入凭据。验证它们后,它会为您颁发一个 token 。然后,您可以使用此 token 访问 RS

您想要获得的(如果我理解正确的话)是使用 token 自动重定向。要实现这一点,您可以在步骤 1 结束时重定向到您的 AS 时简单地传递您尝试访问的 url(即 localhost:9000/home)。您的AS hten 提示用户输入凭据,生成 token ,将其存储为 cookie(在浏览器的情况下),并将您重定向到他收到的 url (localhost:9000/home )。

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

当您到达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");
}
};
}

关于java - 将用户重定向到 oauth2 授权服务器以获取 token Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232002/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com