gpt4 book ai didi

java - Spring security oauth2 - 无法访问/oauth/token 路由

转载 作者:行者123 更新时间:2023-11-30 10:19:13 32 4
gpt4 key购买 nike

我刚刚开始按照本教程为我的 rest api 创建一个身份验证服务器:https://jugbd.org/2017/09/19/implementing-oauth2-spring-boot-spring-security/ .一切顺利,直到最后我无法访问/oauth/token 路由以进行身份​​验证。

我想我需要更多的解释才能完全理解这种身份验证。

谢谢你,马修·默尼耶

PS:这是我的类(class):

ResourceServerConfig.java

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/api/secure/**").authenticated();
}
}

AuthorizationServerConfig.java

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;

@Override
public void configure(AuthorizationServerSecurityConfigurer serverSecurityConfigurer){
serverSecurityConfigurer
.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()")
.allowFormAuthenticationForClients();
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception{
clients.inMemory().withClient("android-client")
.authorizedGrantTypes("client-credentials", "password", "refresh_token")
.authorities("ROLE_CLIENT", "ROLE_ANDROID_CLIENT")
.scopes("read", "write", "trust")
.resourceIds("oauth2resource")
.accessTokenValiditySeconds(5000)
.secret("android-secret").refreshTokenValiditySeconds(50000);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints){
endpoints.authenticationManager(authenticationManager)
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);
}
}

就在我的主楼下面

@Autowired
CustomUserDetailsService userDetailsService;

@Autowired
public void authenticationManager(AuthenticationManagerBuilder builder) throws Exception{
builder.userDetailsService(userDetailsService);
}

最后是我的 CustomUserDetailsS​​ervice 和 UserService

CustomUserDetailsS​​ervice.java

@Service
public class CustomUserDetailsService implements UserDetailsService {

private final UserService userService;

@Autowired
public CustomUserDetailsService(UserService userService) {
this.userService = userService;
}

@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
return this.userService.findByEmail(email);
}
}

用户服务.java

@Service
public class UserService {

@Autowired
MembreRepository membreRepository;

public UserDetails findByEmail(String email){
return membreRepository.findOneByEmail(email);
}
}

最佳答案

默认情况下,端点/oauth/token 是安全的,

因此,要调用此端点,您需要以客户端身份进行身份验证。为此,根据您的设置,您需要在 POST 主体上传递 client_id 和 client_secret(您的设置允许客户端身份验证表单 .allowFormAuthenticationForClients())。

尝试使用参数调用端点:

网址

{{host}}/oauth/token

标题

Content-Type application/x-www-form-urlencoded

后置参数

grant_type: password
scope: read write
username: foo
password: bar
client_id: android-client
client_secret: android-secret

我用Postman来测试

关于java - Spring security oauth2 - 无法访问/oauth/token 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48750257/

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