@@ -47,15 +47,17 @@ Open-OAuth2Playground 是一个仿 Google [OAuth 2.0 Playground](https://develop
47
47
48
48
本项目提供 docker 一键部署、手动源码编译运行、二进制文件一键运行和二进制文件托管运行 4 种方式。
49
49
50
- docker 运行方式 #TODO
50
+ docker 运行方式
51
51
52
52
源码编译、二进制文件运行均依赖于 ` Open-OAuth2Playground ` 二进制文件和 ` cfg ` 配置文件。默认读取二进制文件平级目录的 ` cfg.json ` 文件作为配置文件,支持通过 ` -c /path/to/cfg ` 运行时传参的方式指定特定的 ` cfg ` 配置文件(systemctl 托管运行时需要自行修改 service 文件)。
53
53
54
54
### 方式一、docker 一键部署运行
55
55
56
56
(内置用于测试的 [ oauth-server-lite] ( https://github.com/shanghai-edu/oauth-server-lite/ ) 服务)
57
57
58
- 项目提供 ` docker-compose.yaml ` 文件,可直接一键拉起。
58
+ 项目提供 ` docker-compose.yaml ` 文件,可直接一键拉起。` docker-compose.yaml ` 提供了一种基于容器模式启动的方案。此方案可共享 ` redis ` 和 ` oauth-server-lite ` 的容器网络,仅供测试使用。
59
+
60
+ ![ docker 容器模式下 oauth2playground 结构图] ( imgs/docker-container.svg )
59
61
60
62
``` shell
61
63
docker-compose -p oauth-server-lite up -d
@@ -65,26 +67,15 @@ docker-compose -p oauth-server-lite up -d
65
67
66
68
- 此方式启动时,由于容器内无法直接通过 ` localhost ` 访问其它服务,因此需要通过访问 service name 的方式 ( ` redis:6379 ` ) 连接 redis 。其它配置见文件。
67
69
- ` cas.db ` 默认写入用户信息:
68
- - ` username: cas ` ,可通过配置 ` ${CAS_USERNAME} ` 修改
69
- - ` password: 123456 ` ,可通过配置 ` ${CAS_PASSWORD} ` 修改
70
+ - ` username ` : ` cas ` ,可通过配置 ` ${CAS_USERNAME} ` 修改
71
+ - ` password ` : ` 123456 ` ,可通过配置 ` ${CAS_PASSWORD} ` 修改
70
72
- ` sqlite.db ` 默认写入 oauth client 信息:
71
- - ` client_id: oauth ` ,可通过配置 ` ${OAUTH_CLIENT_ID} ` 修改
72
- - ` client_secret: 123456 ` ,可通过配置 ` ${OAUTH_CLIENT_SECRET} ` 修改
73
- - ` domains: open-oauth2playground ` ,可通过配置 ` ${PLAYGROUND_HOST} ` 修改
74
- - ` grant_types: authorization_code,client_credentials,device_flow ` ,
75
-
76
- [ // ] : # ( todo:这部分要修改 )
77
- - ** cas的service**
78
- - authorization_code | client_credentials | device_flow模式:
79
- ``` txt
80
- client_id:open-oauth2playground
81
- password:open-oauth2playground
82
- ```
83
- - pkce模式:
84
- ```txt
85
- client_id:open-oauth2playground-pkce
86
- ```
87
- 可在Open-OAuth2Playground/apereo-cas/etc/services目录下自行添加新的service
73
+ - ` client_id ` : ` oauth ` ,可通过配置 ` ${OAUTH_CLIENT_ID} ` 修改
74
+ - ` client_secret ` : ` 123456 ` ,可通过配置 ` ${OAUTH_CLIENT_SECRET} ` 修改
75
+ - ` domains ` : ` open-oauth2playground ` ,可通过配置 ` ${PLAYGROUND_HOST} ` 修改
76
+ - ` grant_types ` : ` password ` ,` authorization_code ` ,` urn:ietf:params:oauth:grant-type:device_code ` ,` client_credentials `
77
+
78
+ - 可在 ` Open-OAuth2Playground/apereo-cas/etc/services ` 目录下自行添加新的service
88
79
89
80
### 方式二、源码编译运行
90
81
@@ -378,16 +369,68 @@ VUE_APP_API_VERSION=v1
378
369
379
370
## 使用
380
371
372
+ ** [ Reference 1] ** [ RFC6749] ( https://www.rfc-editor.org/rfc/rfc6749.html )
373
+
374
+ 首先需要进入 ` Open-OAuth2Playground ` 前端首页,在右上角 ` Configuration Settings ` 完成信息配置:
375
+
376
+ ![ 客户端配置] ( imgs/configuration.png )
377
+
381
378
### 一、Authorization Code 模式
382
379
380
+ Authorization Code 模式也被称作授权码模式。步骤如下:
381
+
382
+ 1 . 访问 APP 服务,即点击 GO 图标,这时客户端将用户导向认证服务器 (Authorization Server),即 ` apereo-cas ` server ;
383
+ 2 . 用户(登录后)选择是否授权;
384
+ 3 . 授权后,认证服务器将用户导向重定向 URI,同时返回授权码,即 Step 2 中的 ` Authorization Code ` ;
385
+ 4 . 通过该授权码,用户可以获得访问令牌 (Token) 和刷新访问令牌。之后就可以携带访问令牌访问资源服务器了,即 Step 3 。
386
+
387
+ ![ 授权码模式] ( imgs/authorization-code-mode.png )
388
+
383
389
### 二、Resource Owner Password Credentials 模式
384
390
391
+ Resource Owner Password Credentials 模式也被称作密码模式,步骤如下:
392
+
393
+ 1 . 访问 APP 服务,并向客户端提供用户名和密码,然后点击 Get Token ;
394
+ 2 . 得到访问令牌,即可访问资源服务器。
395
+
396
+ ![ 密码模式] ( /imgs/password.png )
397
+
385
398
### 三、Client Credentials 模式
386
399
400
+ Client Credentials 模式也被称作客户端模式。步骤如下:
401
+
402
+ 1 . 客户端直接向认证服务器进行身份认证,并要求一个访问令牌(无需用户信息);
403
+ 2 . 认证服务器向客户端提供访问令牌,用户使用此令牌访问资源服务器。
404
+
405
+ ![ 客户端模式] ( /imgs/client.png )
406
+
407
+ 客户端模式下认证行为是客户端发出的。由于不存在用户信息的绑定,可以看到,虽然请求成功,但用户是无法获得到和个人信息相关的内容的。
408
+
387
409
### 四、Device Flow 模式
388
410
411
+ Device Flow 模式也被称作设备流模式。步骤如下:
412
+
413
+ 1 . 访问 APP 服务,即点击 GO 图标,客户端会提供一个用户验证码 (User Code) 。这时客户端会将验证码发送给认证服务器,并监听认证服务器的状态;
414
+ ![ 设备流模式-1] ( imgs/device-flow-1.png )
415
+ 2 . 用户可通过扫码或通过认证链接(可以是不同设备)进入认证页面,在有效时间内通过输入验证码完成认证;
416
+ ![ 设备流模式-2] ( imgs/device-flow-2.png )
417
+ 3 . 认证成功后,可返回客户端,这时客户端成功监听到用户完成认证并获取访问令牌;
418
+ ![ 设备流模式-3] ( imgs/device-flow-3.png )
419
+ ![ 设备流模式-4] ( imgs/device-flow-4.png )
420
+ 4 . 用户可通过该访问令牌访问资源服务器。
421
+ ![ 设备流模式-5] ( imgs/device-flow-5.png )
422
+
389
423
### 五、PKCE 模式
390
424
425
+ PKCE (Proof Key for Code Exchange) 模式是一种更安全的授权码模式。步骤如下:
426
+
427
+ 1 . 客户端生成一个随机的 ` code verifier ` (点击 Refresh) ,并通过 ` code challenge method ` (如 SHA256) 得到 ` code challenge ` ;
428
+ 2 . 用户同样通过认证服务器授权(点击 GO,并在认证服务器完成认证,由认证服务器重定向回客户端),得到授权码;
429
+ 3 . 与授权码模式不同,PKCE 授权码模式获取访问令牌需要携带 ` code verifier ` 进行认证,以防止授权码拦截攻击;
430
+ 4 . 获得访问令牌后,即可访问资源服务器。
431
+
432
+ ![ PKCE 授权码模式] ( imgs/pkce.png )
433
+
391
434
## 鸣谢
392
435
393
436
本项目受 Google 的 [ OAuth 2.0 Playground] ( https://developers.google.com/oauthplayground/ ) 启发
0 commit comments