AWS SSO OIDC CreateToken API 详解
ref: https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html
为使用 client secret
进行身份验证的客户端创建并返回访问令牌和刷新令牌。
访问令牌可用于获取配置的 AWS 账户的短期凭证或使用 bearer
身份验证访问 API。
请求语法
POST /token HTTP/1.1
Content-type: application/json
{
"clientId": "string",
"clientSecret": "string",
"code": "string",
"codeVerifier": "string",
"deviceCode": "string",
"grantType": "string",
"redirectUri": "string",
"refreshToken": "string",
"scope": [ "string" ]
}
-
clientId
- 客户端或应用程序的唯一标识符。通常这个值通过 RegisterClient API 获取。
- 类型: String
- 是否必须: 是
-
clientSecret
- 客户端的密钥。通常这个值通过 RegisterClient API 获取
- 类型: String
- 是否必须: 是
-
code
- 仅在使用
Authorization Code
授权类型调用此 API 时使用。 短期码(short-lived code)用于识别此授权请求。 - 类型: String
- 是否必须: 否
- 仅在使用
-
codeVerifier
- 仅在使用
Authorization Code
授权类型调用此 API 时使用。 该值由客户端生成,用于验证客户端在授权时传递的原始code challenge
。 - 类型: String
- 是否必须: 否
- 仅在使用
-
deviceCode
- 仅在使用
Device Code
授权类型调用此 API 时使用。 短期码(short-lived code)用于识别此授权请求。 通常这个值通过 StartDeviceAuthorization API 获取。 - 类型: String
- 是否必须: 否
- 仅在使用
-
grantType
- 支持以下 OAuth 授权类型:
Authorization Code
,Device Code
,Refresh Token
。根据所需的授权类型指定以下值之一:- Authorization Code -
authorization_code
- Device Code -
urn:ietf:params:oauth:grant-type:device_code
- Refresh Token -
refresh_token
- Authorization Code -
- 类型: String
- 是否必须: 是
- 支持以下 OAuth 授权类型:
-
redirectUri
- 仅在使用
Authorization Code
授权类型调用此 API 时使用。此值指定已注册的用于接收授权码的客户端或应用程序的位置。 - 类型: String
- 是否必须: 否
- 仅在使用
-
refreshToken
- 仅在使用
Refresh Token
授权类型调用此 API 时使用。此令牌用于刷新可能过期的短期令牌(short-lived tokens), 例如 Access token. - 类型: String
- 是否必须: 否
- 仅在使用
-
scope
- 请求授权的 scope 列表。 这个参数在这里不生效;访问令牌将始终包含客户端注册期间配置的所有 scope。
- 类型: String Array
- 是否必须: 否
响应语法
HTTP/1.1 200
Content-type: application/json
{
"accessToken": "string",
"expiresIn": number,
"idToken": "string",
"refreshToken": "string",
"tokenType": "string"
}
如果操作成功,服务器将发回 HTTP 200 响应
响应 JSON 中各个字段的含义如下:
-
accessToken
- 用于访问分配给用户的 AWS 账户和应用程序的 bearer 令牌。
- 类型: String
-
expiresIn
- 指示 accessToken 过期的时间(秒)。
- 类型:Integer
-
idToken
- idToken 尚未实现或不支持。
- 类型: String
-
refreshToken
- 响应中如果包含了这个字段,则可以使用该令牌来刷新之前颁发的可能已过期的 accessToken。
- 类型: String
-
tokenType
- 用于通知客户端返回的令牌是访问令牌。支持的令牌类型为
Bearer
。 - 类型: String
- 用于通知客户端返回的令牌是访问令牌。支持的令牌类型为
实例
URL 地址:https://oidc.{region}.amazonaws.com
这里的 region
替换成实际的 region 即可。
注意:以下例子中,为了便于展示,对所有的 JSON 进行了格式化。
OAuth
我们下面示例中都是用的 Authorization Code
授权类型。
在这种情况下,我们需要设置请求中的 code
, codeVerifier
, grantType
, redirectUri
.
-
grantType
它的值是常量,authorization_code
. -
对于
redirectUri
, 根据你实际的项目配置来填写即可。
对于 code
, codeVerifier
, 如何获取呢?
- 对于
code
, 需要通过 OAuth 协议,构建一个 OAuthAuthorization Code
授权流程中的用户认证流程。 获取响应中的 code。
// 初始用户认证请求
https://oidc.us-east-1.amazonaws.com/authorize?client_id=xxxx&response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1%3A37117&state=xxxx%3D%3D&code_challenge=xxxx&code_challenge_method=S256
// 用户在浏览器中进行授权
// 授权成功后, 我们从 redirectUri 处获取响应:
/?code=xxxxJ&state=aHRxxxxNw%3D%3D
- 对于
codeVerifier
, 它是用于计算得到code_challenge
的原始值。
获取一个全新的 Token
1. 请求
POST /token HTTP/1.1
Host: oidc.us-east-1.amazonaws.com
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 3336
{
"clientId":"zyrRc_xprD0YDHd4KYgtR3VzLWVhc3QtMQ",
"clientSecret":******,
"code":"eyJraWQiOiJrZXktMTU2NDAyODA3U....P9L913k7kF1q39bz9sFd7Ngm770D7x1y63IHJ",
"codeVerifier":"yg3zZkeWwzHO4uibgHMyfomhDd7Qv6yd-OXym2I1PZo",
"grantType":"authorization_code",
"redirectUri":"http:\/\/127.0.0.1:50804"
}
2. 响应
HTTP/1.1 200 OK
Date: Wed, 10 Sep 2025 03:11:21 GMT
Content-Type: application/json
Content-Length: 661
Connection: close
x-amzn-RequestId: ab85796c-380b-4498-a115-12223fa8edc3
{
"accessToken":******,
"aws_sso_app_session_id":"xxxxxxxx-7b60-4396-958e-xxxxx7af44bc",
"expiresIn":3600,
"idToken":null,
"issuedTokenType":null,
"originSessionId":null,
"refreshToken":******,
"tokenType":"Bearer"
}
刷新已有 Token
1. 请求
POST /token HTTP/1.1
Host: oidc.us-east-1.amazonaws.com
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 3229
{
"clientId":"UhVET-ZlxxxxxxXtxyc4Z3VzLWVhc3QtMQ",
"clientSecret":******,
"refreshToken":******,
"grantType":"refresh_token"
}
2. 响应
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 19:41:00 GMT
Content-Type: application/json
Content-Length: 629
Connection: close
x-amzn-RequestId: 9b22a953-e8ef-41ef-b091-8f7c84f298c4
{
"accessToken":******,
"aws_sso_app_session_id":null,
"expiresIn":3600,
"idToken":null,
"issuedTokenType":null,
"originSessionId":null,
"refreshToken":******,
"tokenType":"Bearer"
}
OAuth Authorization Code 示例
https://oidc.us-east-1.amazonaws.com/authorize?client_id=zyrRc_xprD0YDHd4KYgtR3VzLWVhc3QtMQ&response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1%3A37117&state=aHR0cDovLzEyNy4wLjAuMTozNzExNw%3D%3D&code_challenge=b12x3TqjqwFJfiMLjjsqdtB6VisJv9qA0qagXgkkOlI&code_challenge_method=S256
/?code=eyJraWQiOiJrZXktMTU2NDAyODA3OCIsImFsZyI6IkhTMzg0In0.eyJwbGFpbnRleHQiOiJEMEJHLXRkWFZfOS1nR1JqcXdFaG1wOU9FaW9ZRkhuR3R3YmxuV05DQVdVIiwiZXhwIjoxNzU3NDg5OTk5LCJ0eXBlIjoiYXV0aENvZGUifQ.EQEi1ugyiSlkfK0hSG1_LwM7qOvEKdLaANVe-kLR4XsTkw_I7l5TfyWdfJjkQT2J&state=aHR0cDovLzEyNy4wLjAuMTozNzExNw%3D%3D