From 6be1196e9e5a97d05506c1e62a8a2089133afdfd Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Wed, 24 Jun 2020 19:40:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A0=94=E7=A9=B6=E4=B8=8B=20OAuth2=20?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pom.xml | 7 --- .../OAuth2AuthorizationServerConfig.java | 8 ++-- .../config/OAuth2ResourceServerConfig.java | 11 +---- .../controller/LoginController.java | 46 +++++++------------ .../src/main/resources/application.yml | 6 ++- lab-68/pom.xml | 2 +- 6 files changed, 28 insertions(+), 52 deletions(-) diff --git a/lab-68/lab-68-demo01-resource-owner-password-credentials-server/pom.xml b/lab-68/lab-68-demo01-resource-owner-password-credentials-server/pom.xml index 7342978f..27f7b4c6 100644 --- a/lab-68/lab-68-demo01-resource-owner-password-credentials-server/pom.xml +++ b/lab-68/lab-68-demo01-resource-owner-password-credentials-server/pom.xml @@ -44,13 +44,6 @@ spring-boot-starter-security - - - - - - - org.springframework.security.oauth.boot diff --git a/lab-68/lab-68-demo02-authorization-server-with-resource-owner-password-credentials/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java b/lab-68/lab-68-demo02-authorization-server-with-resource-owner-password-credentials/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java index bb5bd507..e41c4f1a 100644 --- a/lab-68/lab-68-demo02-authorization-server-with-resource-owner-password-credentials/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java +++ b/lab-68/lab-68-demo02-authorization-server-with-resource-owner-password-credentials/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java @@ -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 diff --git a/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java b/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java index ce90a21f..af05b988 100644 --- a/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java +++ b/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java @@ -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; -// } - } diff --git a/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/LoginController.java b/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/LoginController.java index 5765cd3f..809c9a9d 100644 --- a/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/LoginController.java +++ b/lab-68/lab-68-demo02-resource-server/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/LoginController.java @@ -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")); -// -// } - } diff --git a/lab-68/lab-68-demo02-resource-server/src/main/resources/application.yml b/lab-68/lab-68-demo02-resource-server/src/main/resources/application.yml index 05600270..72413355 100644 --- a/lab-68/lab-68-demo02-resource-server/src/main/resources/application.yml +++ b/lab-68/lab-68-demo02-resource-server/src/main/resources/application.yml @@ -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 diff --git a/lab-68/pom.xml b/lab-68/pom.xml index 2e63f9ba..82ad013f 100644 --- a/lab-68/pom.xml +++ b/lab-68/pom.xml @@ -12,7 +12,7 @@ lab-68 pom - + lab-68-demo01-resource-owner-password-credentials-server lab-68-demo02-resource-server lab-68-demo02-authorization-server-with-resource-owner-password-credentials