Environment
- Access Manager 4.5.0
- Access Manager 4.5.1
Situation
- Access Manager IDP server acting as OAuth / OpenID authorization server
- Client application sends a request to retrieve and access token / id_token using the grant flow
- The
 returned id_token includes the "acr" attribute but instead of string 
encoding it is an array which the OAuth client fails on processing
 {
 "iss": "https://namdev.npsh.hu/nidp/oauth/nam",
 "sub": "a6de5c23826de14a831ba6de5c23826d",
 "aud": "dce9a3ab-5955-486d-a730-4cca093d1d5d",
 "exp": 1583942285,
 "iat": 1583938685,
 "acr": {
 "values": [
 "secure/name/password/uri"
 ]
 }
 }
Resolution
- This issues has been fixed with Access Manager Version 4.5.2
- After applying the fix the "acr" attribute should be included with the "id_token" as string
 Example:
 {
 "iss": "https://idpa.kgast.nam.com:8443/nidp/oauth/nam",
 "sub": "80a2c4e12d63db11ae0f0001021ee75e",
 "aud": "e3371584-cc69-41c6-9aef-3074585ad613",
 "exp": 1588248523,
 "iat": 1588244923,
 "acr": "secure/name/password/uri"
 }
Cause
- "acr" attribute has been send as array instead type string
Additional Information
- As per openid specs the acr has to be of type string
 acr
- OPTIONAL. Authentication Context Class Reference. String specifying an Authentication Context Class Reference value that identifies the Authentication Context Class that the authentication performed satisfied. The value "0" indicates the End-User authentication did not meet the requirements of ISO/IEC 29115 [ISO29115] level 1. Authentication using a long-lived browser cookie, for instance, is one example where the use of "level 0" is appropriate. Authentications with level 0 SHOULD NOT be used to authorize access to any resource of any monetary value. (This corresponds to the OpenID 2.0 PAPE [OpenID.PAPE] nist_auth_level 0.) An absolute URI or an RFC 6711 [RFC6711] registered name SHOULD be used as the acr value; registered names MUST NOT be used with a different meaning than that which is registered. Parties using this claim will need to agree upon the meanings of the values used, which may be context-specific. The acr value is a case sensitive string.