Using okta.myAccount.manage scope on client credentials flow against a custom authorization server produces an authorization_details claim in the access token that is not documented and is non-compliant with RFC 9396 section 2.
The JWT payload is returning an array of strings, when it should be an array of objects.
Create JWT:
oauth2c ${OKTA_URL} \
--client-id ${OKTA_CLIENT_ID} \
--client-secret ${OKTA_CLIENT_SECRET} \
--grant-type client_credentials \
--auth-method client_secret_basic \
--response-mode query \
--response-types code \
--scopes okta.myAccount.manage \
--pkce \
--no-browser
JWT payload:
{
"ver": 1,
"jti": "AT.zq1ynGL4xxxxxxxxx-AVxnfCClMUgZB1uU_4Q34",
"iss": "``https://foo.oktapreview.com/oauth2/default``",
"aud": "api://default",
"iat": 1790288257,
"exp": 1790291857,
"cid": "abc123",
"scp": [
"okta.myAccount.manage"
],
"sub": "abc123",
"authorization_details": [
"okta.myAccount.manage"
]
}
It looks like this is the case for all okta.* scopes. Here’s another example:
oauth2c ${OKTA_URL} \
--client-id ${OKTA_CLIENT_ID} \
--client-secret ${OKTA_CLIENT_SECRET} \
--grant-type client_credentials \
--auth-method client_secret_basic \
--response-mode query \
--response-types code \
--scopes okta.myAccount.email.read \
--scopes okta.myAccount.profile.read \
--pkce \
--no-browser
JWT payload:
{
"ver": 1,
"jti": "AT.gEFm5Qy40xxxxxxBLYeJ72I4G71PsKGkXY9eWNg",
"iss": "https://foo.oktapreview.com/oauth2/default",
"aud": "api://default",
"iat": 1790355121,
"exp": 1790358721,
"cid": "abc123",
"scp": [
"okta.myAccount.email.read",
"okta.myAccount.profile.read"
],
"sub": "abc123",
"authorization_details": [
"okta.myAccount.email.read",
"okta.myAccount.profile.read"
]
}