【发布时间】:2017-12-27 04:06:58
【问题描述】:
我有 2 个应用程序正在运行,一个是资源服务器,我有需要身份验证才能查看文本的信息。然后我有提供令牌的授权服务器。现在我可以使用 postman 或 Insomnia,添加 auth_url、token_url、client_id、client_secret 并获得令牌。我将令牌添加到标头,然后使用标头向我的资源服务器发出获取请求,它工作得很好。
现在我不知道如何直接从我的资源服务器实现重定向。就像我去的时候
本地主机:9000/家
我想被重定向到:
localhost:9001/登录
我使用 inmemory 用户登录的位置,然后它会将我重定向回 localhost:9000/home,我会看到该消息。
实现用户访问 localhost:9000/home 信息的最佳方式是什么?你去 localhost:9000/home,它去 localhost:9001 上的授权服务器,你用用户名和密码登录。批准授权,它会让你回到 localhost:9000/home,然后你可以看到之前受保护的文本,因为你没有访问它的令牌。
资源服务器.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
【问题讨论】:
-
它实际上并不是
OAuth2规范的一部分。通常,当有人在不提供令牌的情况下访问您的 RS 时,您应该返回 401。重定向到 AS 不是你的 RS 工作 -
@Nathan 但解决问题的最佳方法是什么?
-
当您到达
localhost:9000/home时,您只需得到一个 401(如果需要,您可以在正文中发送一些详细信息)。您的客户应该知道他必须从哪里获得令牌,以及他应该如何获得它。您可以在错误正文中指定原因:“缺少令牌”、“过期令牌”、“范围不足”、... -
@Nathan 是的,我明白,我更多的是考虑如何实现用户登录功能,因此用户可以在 localhost:9000/home 上查看内容,而无需实际使用邮递员或失眠之类的东西跨度>
-
我不太明白你现在在问什么。你能更新你的问题,让每个人都能看到吗?这会更清楚:p
标签: java spring-boot oauth-2.0