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