From a166f8246fd5e7930ebe00609bd2f826a85844fa Mon Sep 17 00:00:00 2001
From: YunaiV <>
Date: Fri, 26 Jun 2020 01:18:35 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20OAuth2=20=E7=AE=80?=
=?UTF-8?q?=E5=8C=96=E6=A8=A1=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lab-68/lab-68-demo01-implicit/pom.xml | 55 ++++++++++++++++++
.../ResourceServerApplication.java | 13 +++++
.../OAuth2AuthorizationServerConfig.java | 38 +++++++++++++
.../config/OAuth2ResourceServerConfig.java | 26 +++++++++
.../config/SecurityConfig.java | 56 +++++++++++++++++++
.../controller/ExampleController.java | 18 ++++++
lab-68/pom.xml | 1 +
7 files changed, 207 insertions(+)
create mode 100644 lab-68/lab-68-demo01-implicit/pom.xml
create mode 100644 lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/ResourceServerApplication.java
create mode 100644 lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2AuthorizationServerConfig.java
create mode 100644 lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java
create mode 100644 lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/SecurityConfig.java
create mode 100644 lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/ExampleController.java
diff --git a/lab-68/lab-68-demo01-implicit/pom.xml b/lab-68/lab-68-demo01-implicit/pom.xml
new file mode 100644
index 00000000..280621bb
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/pom.xml
@@ -0,0 +1,55 @@
+
+
+
+ lab-68
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-68-demo01-implicit
+
+
+
+ 2.2.4.RELEASE
+
+ 1.8
+ 1.8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+
+
+
+
+ org.springframework.security.oauth.boot
+ spring-security-oauth2-autoconfigure
+ ${spring.boot.version}
+
+
+
+
diff --git a/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/ResourceServerApplication.java b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/ResourceServerApplication.java
new file mode 100644
index 00000000..630affa7
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/ResourceServerApplication.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springboot.lab68.resourceserverdemo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ResourceServerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ResourceServerApplication.class, args);
+ }
+
+}
diff --git a/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2AuthorizationServerConfig.java b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2AuthorizationServerConfig.java
new file mode 100644
index 00000000..553a8e75
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2AuthorizationServerConfig.java
@@ -0,0 +1,38 @@
+package cn.iocoder.springboot.lab68.resourceserverdemo.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
+
+/**
+ * 授权服务器配置
+ */
+@Configuration
+@EnableAuthorizationServer
+public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
+
+ // 用户认证
+ @Autowired
+ private AuthenticationManager authenticationManager;
+
+ @Override
+ public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
+ endpoints.authenticationManager(authenticationManager);
+ }
+
+ @Override
+ public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
+ clients.inMemory()
+ .withClient("clientapp").secret("112233") // Client 账号、密码。
+ .authorizedGrantTypes("implicit") // 授权码模式
+ .redirectUris("http://127.0.0.1:9090/callback02") // 配置回调地址,选填。
+ .scopes("read_userinfo", "read_contacts") // 可授权的 Scope
+// .and().withClient() // 可以继续配置新的 Client
+ ;
+ }
+
+}
diff --git a/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java
new file mode 100644
index 00000000..d877589a
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuth2ResourceServerConfig.java
@@ -0,0 +1,26 @@
+package cn.iocoder.springboot.lab68.resourceserverdemo.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+/**
+ * 资源服务器配置
+ */
+@Configuration
+@EnableResourceServer
+public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+ @Override
+ public void configure(HttpSecurity http) throws Exception {
+ http.authorizeRequests()
+ .anyRequest().authenticated()
+ // 设置 /api/ 开头的 URL 需要保护
+ .and().requestMatchers().antMatchers("/api/**");
+ }
+
+}
+
+// 实际,OAuth2ResourceServer 不是和 OAuth2AuthorizationServer 一起。
+// 主要考虑,简化 demo ,所以改成这样。
diff --git a/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/SecurityConfig.java b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/SecurityConfig.java
new file mode 100644
index 00000000..1116d7c1
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/SecurityConfig.java
@@ -0,0 +1,56 @@
+package cn.iocoder.springboot.lab68.resourceserverdemo.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.BeanIds;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.password.NoOpPasswordEncoder;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Override
+ @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
+ public AuthenticationManager authenticationManagerBean() throws Exception {
+ return super.authenticationManagerBean();
+ }
+
+ @Bean
+ public static NoOpPasswordEncoder passwordEncoder() {
+ return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
+ }
+
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.
+ // 使用内存中的 InMemoryUserDetailsManager
+ inMemoryAuthentication()
+ // 不使用 PasswordEncoder 密码编码器
+ .passwordEncoder(passwordEncoder())
+ // 配置 yunai 用户
+ .withUser("yunai").password("1024").roles("USER");
+ }
+
+// @Override
+// protected void configure(HttpSecurity http) throws Exception {
+// http.authorizeRequests()
+// // 对所有 URL 都进行认证
+// .anyRequest()
+// .authenticated();
+// }
+
+// @Override
+// public void configure(HttpSecurity http) throws Exception {
+// http.csrf()
+// .disable()
+// .authorizeRequests()
+// .antMatchers("/oauth/**", "/login/**", "/logout/**").permitAll()
+// .anyRequest().authenticated()
+// .and().formLogin().permitAll();
+// }
+
+}
diff --git a/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/ExampleController.java b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/ExampleController.java
new file mode 100644
index 00000000..2114a466
--- /dev/null
+++ b/lab-68/lab-68-demo01-implicit/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/ExampleController.java
@@ -0,0 +1,18 @@
+package cn.iocoder.springboot.lab68.resourceserverdemo.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 示例模块 Controller
+ */
+@RestController
+@RequestMapping("/api/example")
+public class ExampleController {
+
+ @RequestMapping("/hello")
+ public String hello() {
+ return "world";
+ }
+
+}
diff --git a/lab-68/pom.xml b/lab-68/pom.xml
index 94ce436f..e8ca8d28 100644
--- a/lab-68/pom.xml
+++ b/lab-68/pom.xml
@@ -14,6 +14,7 @@
lab-68-demo01-resource-owner-password-credentials-server
lab-68-demo01-authorization-code
+ lab-68-demo01-implicit
lab-68-demo02-resource-server
lab-68-demo02-authorization-server-with-resource-owner-password-credentials