研究下 OAuth2 进行改造

This commit is contained in:
YunaiV
2020-06-24 19:40:54 +08:00
parent 2d6132ad95
commit 6be1196e9e
6 changed files with 28 additions and 52 deletions

View File

@@ -44,13 +44,6 @@
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- 实现对 Spring Security OAuth2 的自动配置 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.security.oauth</groupId>-->
<!-- <artifactId>spring-security-oauth2</artifactId>-->
<!-- <version>2.5.0.RELEASE</version>-->
<!-- </dependency>-->
<!-- 实现对 Spring Security OAuth2 的自动配置 -->
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>

View File

@@ -29,10 +29,10 @@ public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigur
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
// oauthServer.tokenKeyAccess("isAuthenticated()")
// .checkTokenAccess("isAuthenticated()");
oauthServer.tokenKeyAccess("permitAll()")
.checkTokenAccess("permitAll()");
oauthServer.tokenKeyAccess("isAuthenticated()")
.checkTokenAccess("isAuthenticated()");
// oauthServer.tokenKeyAccess("permitAll()")
// .checkTokenAccess("permitAll()");
}
@Override

View File

@@ -15,18 +15,11 @@ public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 设置 /login 无需权限访问
.antMatchers("/login").permitAll()
// 设置其它请求,需要认证后访问
.anyRequest().authenticated()
;
}
//
// @Bean
// public OAuth2RestTemplate oauth2RestTemplate(OAuth2ProtectedResourceDetails details) {
// OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(details);
//
// /* To validate if required configurations are in place during startup */
// return oAuth2RestTemplate;
// }
}

View File

@@ -1,5 +1,8 @@
package cn.iocoder.springboot.lab68.resourceserverdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.security.oauth2.OAuth2ClientProperties;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordResourceDetails;
@@ -13,42 +16,27 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/")
public class LoginController {
// @Autowired
// private OAuth2ProtectedResourceDetails details;
@Autowired
private OAuth2ClientProperties oauth2ClientProperties;
@Value("${security.oauth2.access-token-uri}")
private String accessTokenUri;
@PostMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password) {
public OAuth2AccessToken login(@RequestParam("username") String username,
@RequestParam("password") String password) {
// 创建 ResourceOwnerPasswordResourceDetails 对象
ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails();
resourceDetails.setAccessTokenUri(accessTokenUri);
resourceDetails.setClientId(oauth2ClientProperties.getClientId());
resourceDetails.setClientSecret(oauth2ClientProperties.getClientSecret());
resourceDetails.setUsername(username);
resourceDetails.setPassword(password);
resourceDetails.setClientId("clientapp");
resourceDetails.setClientSecret("112233");
resourceDetails.setAccessTokenUri("http://127.0.0.1:8080/oauth/token");
// resourceDetails.setAccessTokenUri("http://127.0.0.1:8080/oauth/authorize");
// 创建 OAuth2RestTemplate 对象
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resourceDetails);
// resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.form); // fetch access_token by sending authentication data in HTTP Body
// resourceDetails.setAuthenticationScheme(AuthenticationScheme.header); // send access_token via HTTP Header 'Bearer' field when accessing actual service
//
// DefaultAccessTokenRequest defaultAccessTokenRequest = new DefaultAccessTokenRequest();
restTemplate.setAccessTokenProvider(new ResourceOwnerPasswordAccessTokenProvider());
OAuth2AccessToken accessToken = restTemplate.getAccessToken();
String result = restTemplate.postForObject("http://127.0.0.1:8080/oauth/authorize", resourceDetails,
String.class);
return "";
// 获取访问令牌
return restTemplate.getAccessToken();
}
// public String login() {
// ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails();
// resourceDetails.setUsername("roy");
// resourceDetails.setPassword("spring");
// resourceDetails.setAccessTokenUri(format("http://localhost:%d/oauth/token", port));
// resourceDetails.setClientId("clientapp");
// resourceDetails.setClientSecret("123456");
// resourceDetails.setGrantType("password");
// resourceDetails.setScope(asList("read", "write"));
//
// }
}

View File

@@ -3,10 +3,12 @@ server:
security:
oauth2:
# OAuth2 Client 配置
# OAuth2 Client 配置,对应 OAuth2ClientProperties 类
client:
client-id: clientapp
client-secret: 112233
# OAuth2 Resource 配置
# OAuth2 Resource 配置,对应 ResourceServerProperties 类
resource:
token-info-uri: http://127.0.0.1:8080/oauth/check_token # 获得 Token 信息的 URL
# 访问令牌获取 URL自定义的
access-token-uri: http://127.0.0.1:8080/oauth/token

View File

@@ -12,7 +12,7 @@
<artifactId>lab-68</artifactId>
<packaging>pom</packaging>
<modules>
<!-- <module>lab-68-demo01-resource-owner-password-credentials-server</module>-->
<module>lab-68-demo01-resource-owner-password-credentials-server</module>
<module>lab-68-demo02-resource-server</module>
<module>lab-68-demo02-authorization-server-with-resource-owner-password-credentials</module>
</modules>