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.1Content-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 200Content-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.1Host: oidc.us-east-1.amazonaws.comAccept-Encoding: gzip, deflateConnection: closeContent-Type: application/jsonContent-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 OKDate: Wed, 10 Sep 2025 03:11:21 GMTContent-Type: application/jsonContent-Length: 661Connection: closex-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.1Host: oidc.us-east-1.amazonaws.comAccept-Encoding: gzip, deflateConnection: closeContent-Type: application/jsonContent-Length: 3229{  "clientId":"UhVET-ZlxxxxxxXtxyc4Z3VzLWVhc3QtMQ",  "clientSecret":******,  "refreshToken":******,  "grantType":"refresh_token"}
2. 响应
HTTP/1.1 200 OKDate: Tue, 09 Sep 2025 19:41:00 GMTContent-Type: application/jsonContent-Length: 629Connection: closex-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