获取PKCE授权码
用户访问第三方应用时,第三方应用使用code_challenge向竹云IDaaS发起授权登录请求,用户输入用户密码认证成功后,竹云IDaaS将重定向到第三方应用,并且带上授权码code参数。
# 请求说明
GET https://{your_domain}/api/v1/oauth2/authorize
# 请求示例
GET https://{your_domain}/api/v1/oauth2/authorize?response_type=code&client_id={client_id}&redirect_uri=http://oauthdemo.bccastle.com/demo/index.jsp&state=15924362&code_challenge=5qa69AH8v3r33rVuTGjZalHczEq
MsXYvllXXL8zXorM&code_challenge_method=S256
# 请求参数
参数名 | 中文名称 | 必须 | 示例值 | 描述 |
---|---|---|---|---|
response_type | 授权类型 | 必须 | code | 此值固定为code |
client_id | 应用标识 | 必须 | RqB2HJtkz6iH76qA | 申请接入后分配给第三方应用的clientid。 |
redirect_uri | 回调地址 | 可选 | http://oauthdemo.bccastle.com /demo/index.jsp | 成功授权后的回调地址,必须是注册应用时填写的可信域名一致,建议设置为应用首页或应用的用户中心。注意需要将url进行URLEncode。 |
state | 应用端的状态码 | 可选 | 15924362 | client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。 |
scope | 适用范围 | 可选 | get_user_info | 此值固定为get_user_info |
code_challenge | PKCE挑战码 | 必须 | 5qa69AMsXYvllXorM | 应用随机生成一串长度43-128的字符并作URL-Safe的Base64编码处理,结果用作 code_verifier,将这串字符通过SHA256哈希,并用URL-Safe的Base64编码处理,结果用作 code_challenge |
code_challenge_method | PKCE挑战码加密方法 | 必须 | S256 | 固定值S256 |
# 返回示例
正确返回示例
HTTP Status: 302 REDIRECT
http://oauthdemo.bccastle.com/demo/index.jsp?code=stRWlW&state=15924362
client_id参数缺失
HTTP Status: 400 BAD REQUEST
{
"error": "invalid_request",
"error_description": "Missing client_id"
}
client_id参数不正确
HTTP Status: 400 BAD REQUEST
{
"error": "invalid_request",
"error_description": "client_id parameter is error"
}
response_type参数名称、值错误
HTTP Status: 400 BAD REQUEST
{
"error": "unsupported_response_type",
"error_description": "Unsupported response types: [xxx]"
}
redirect_uri 参数不正确
HTTP Status: 400 BAD REQUEST
{
"error": "invalid_request",
"error_description": "Invalid redirect: https://www.baidu.com does not match one of the registered values."
}
scope参数不正确
HTTP Status: 302
{redirect_uri}?error=invalid_scope&error_description=Invalid scope: xxx&state=123456
code_challenge参数缺失
HTTP Status: 400 BAD REQUEST
{
"error": "invalid_request",
"error_description": "Miss code_challenge"
}
code_challenge_method参数错误
HTTP Status: 400 BAD REQUEST
{
"error": "invalid_request",
"error_description": "Unsupported code_challenge_method: xxx"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 返回参数
如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值。
参数名 | 中文名称 | 必须 | 示例值 | 描述 |
---|---|---|---|---|
code | 授权码 | 必须 | stRWlW | 用户登录并授权后,授权服务器返回给应用的授权码。注意:此code有效期5分钟,有效期内只能使用一次。 |
state | 应用端的状态码 | 可选 | 15924362 | client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。 |