diff --git a/TODO.md b/TODO.md
index 17c9c6c..6872f5a 100644
--- a/TODO.md
+++ b/TODO.md
@@ -30,7 +30,7 @@
- [x] ~~spring-boot-demo-rbac-security(实现基于 RBAC 的权限模型 - Spring Security)~~
- [ ] spring-boot-demo-rbac-shiro(实现基于 RBAC 的权限模型 - shiro)
- [x] ~~spring-boot-demo-session(统一 Session 管理)~~
-- [ ] spring-boot-demo-session(OAuth2 认证)
+- [ ] spring-boot-demo-oauth(OAuth2 认证)
- [ ] spring-boot-demo-social(第三方授权验证,实现 QQ、微信、GitHub 等第三方登录)
- [x] ~~spring-boot-demo-zookeeper(使用 zookeeper 结合AOP实现分布式锁)~~
- [x] ~~spring-boot-demo-mq-rabbitmq(集成消息中间件 - RabbitMQ)~~
diff --git a/pom.xml b/pom.xml
index 26562d3..17f39df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,7 @@
spring-boot-demo-rbac-security
spring-boot-demo-rbac-shiro
spring-boot-demo-session
+ spring-boot-demo-oauth
spring-boot-demo-social
spring-boot-demo-zookeeper
spring-boot-demo-mq-rabbitmq
diff --git a/spring-boot-demo-oauth/.gitignore b/spring-boot-demo-oauth/.gitignore
new file mode 100644
index 0000000..82eca33
--- /dev/null
+++ b/spring-boot-demo-oauth/.gitignore
@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
\ No newline at end of file
diff --git a/spring-boot-demo-oauth/pom.xml b/spring-boot-demo-oauth/pom.xml
new file mode 100644
index 0000000..7a464b0
--- /dev/null
+++ b/spring-boot-demo-oauth/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ spring-boot-demo-oauth
+ 1.0.0-SNAPSHOT
+ jar
+
+ spring-boot-demo-oauth
+ Demo project for Spring Boot
+
+
+ com.xkcoding
+ spring-boot-demo
+ 1.0.0-SNAPSHOT
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ spring-boot-demo-oauth
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-boot-demo-oauth/src/main/java/com/xkcoding/oauth/SpringBootDemoOauthApplication.java b/spring-boot-demo-oauth/src/main/java/com/xkcoding/oauth/SpringBootDemoOauthApplication.java
new file mode 100644
index 0000000..ea0e8aa
--- /dev/null
+++ b/spring-boot-demo-oauth/src/main/java/com/xkcoding/oauth/SpringBootDemoOauthApplication.java
@@ -0,0 +1,14 @@
+package com.xkcoding.oauth;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringBootDemoOauthApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootDemoOauthApplication.class, args);
+ }
+
+}
+
diff --git a/spring-boot-demo-oauth/src/main/resources/application.properties b/spring-boot-demo-oauth/src/main/resources/application.properties
new file mode 100644
index 0000000..e69de29
diff --git a/spring-boot-demo-oauth/src/test/java/com/xkcoding/oauth/SpringBootDemoOauthApplicationTests.java b/spring-boot-demo-oauth/src/test/java/com/xkcoding/oauth/SpringBootDemoOauthApplicationTests.java
new file mode 100644
index 0000000..9b53df2
--- /dev/null
+++ b/spring-boot-demo-oauth/src/test/java/com/xkcoding/oauth/SpringBootDemoOauthApplicationTests.java
@@ -0,0 +1,17 @@
+package com.xkcoding.oauth;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringBootDemoOauthApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+