OIDC callback handler..
curl --request GET \ --url 'https://stratum.example.com/v1/iam/oidc/example/callback?state=example'The provider redirects here. The URL state must equal the browser’s
stratum_oidc_login cookie and match a login started on this control
plane that has not been used yet (a replayed or forged callback answers
400). The code is exchanged with the PKCE verifier, the id_token is
verified (signature, audience, expiry, nonce), and the Stratum user is
matched by link, then by verified email, or created when the provider
allows JIT. An inactive user is refused.
With a post_login the answer is a 302 that carries a one-time code,
never a session token: <path>#code=<code> for a console path (the
fragment never reaches a server or a Referer), <url>?code=<code> for a
loopback URL. Trade the code at POST /v1/iam/oidc/exchange. Without a
post_login the answer is 200 with the session in the body.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Login succeeded; no post-login URL, so the session is in the body.
object
object
Whether the user has an active TOTP MFA enrollment..
. Present (true) on the login response and GET /v1/iam/me
while the user still has the install-time password.
. Present (true) on the login response and GET /v1/iam/me
while a TOTP enrollment is owed after a node MFA recovery.
. The user still has the install-time password (a one-time
credential). Until POST /v1/iam/users/{userId}/password sets a new
one, this session may only call GET /v1/iam/me, POST /v1/iam/logout and that endpoint; everything else answers 403 PASSWORD_CHANGE_REQUIRED.
. A node recovery (stratum-bootstrap recover admin-mfa)
removed the user’s TOTP. Until a new one is enrolled and verified
(POST /v1/iam/users/{userId}/mfa/totp/enroll, then .../verify),
this session may only call those two, GET /v1/iam/me and POST /v1/iam/logout; everything else answers 403 MFA_ENROLLMENT_REQUIRED. When a password change is owed too, it
comes first.
Example
{ "user": { "state": "pending" }}Redirect to the post-login URL with a one-time code.
Bad request.
object
The findings of a rejected IAM policy document (custom and resource policies).
One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.
object
The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.
Index of the statement at fault; -1 for the document as a whole.
The offending action, where one is at fault (ACTION_NOT_APPLICABLE).
Field errors, for codes that carry them: each problem at its field
(see FieldError). Documented on the responses that set it, e.g.
approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED.
Absent otherwise.
One field’s problem, the stage-2 installer API’s shape.
field is the field’s path, message what is wrong with it.
object
The field’s path, e.g. links[0].interface, disks[1].confirm,
mgmt.address or role; empty for the whole request.
Structured facts about the refusal, for codes that carry them. The
shape is fixed per code and documented on the response that answers
it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and
IMAGE_IN_USE. Absent for codes that carry none.
object
Example
{ "issues": [ { "code": "ACTION_NOT_APPLICABLE", "action": "compute:CreateVpc" } ]}Missing or invalid token.
object
The findings of a rejected IAM policy document (custom and resource policies).
One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.
object
The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.
Index of the statement at fault; -1 for the document as a whole.
The offending action, where one is at fault (ACTION_NOT_APPLICABLE).
Field errors, for codes that carry them: each problem at its field
(see FieldError). Documented on the responses that set it, e.g.
approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED.
Absent otherwise.
One field’s problem, the stage-2 installer API’s shape.
field is the field’s path, message what is wrong with it.
object
The field’s path, e.g. links[0].interface, disks[1].confirm,
mgmt.address or role; empty for the whole request.
Structured facts about the refusal, for codes that carry them. The
shape is fixed per code and documented on the response that answers
it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and
IMAGE_IN_USE. Absent for codes that carry none.
object
Example
{ "issues": [ { "code": "ACTION_NOT_APPLICABLE", "action": "compute:CreateVpc" } ]}