Migration Guide: Legacy to FAPI 2.0
This guide assists partners in transitioning existing integrations from the Corppass Authorization API (Legacy) to the new FAPI 2.0‑compliant Authorization API.
The new implementation strengthens security by adopting the Financial-grade API (FAPI) 2.0 Security Profile, built on OAuth 2.0 and OpenID Connect.
Why Migrate?
FAPI 2.0 introduces enhanced security mechanisms, mandated flows, and updated token structures that improve confidentiality, integrity, and replay protection compared to the Legacy Security Profile. These changes align with global security best practices and provide long‑term reliability.
Legacy Security Profile will be deprecated, and partners must migrate to continue using the service.
Key Changes
See Changelog: FAPI 2.0 Launch
Enhanced Security
Standard authorization code flow
Enhanced security with
Stricter TTL requirements.
Stricter Client Assertion requirements.
Mandatory Proof Key of Code Exchange (PKCE).
Mandatory Demonstrating Proof of Possession (DPoP) (sender-constrained tokens).
Stricter set of allowed TLS cipher suites.
Enforce HTTPS scheme for callback redirect URLs
Authorization Flow
Authorization parameters provided via front-channel (params in URL).
Authorization parameters provided via back-channel Pushed Authorization Request (PAR) endpoint.
The requests are also contextualised with new parameters for Corppass Login applications:
authentication_context_typeauthentication_context_message
Refer to Pushed Authorization Request for more details.
Authorization Request Parameters
Authorization Endpoint:
client_idcode_challengecode_challenge_methodresponse_typeredirect_uriscopestatenonce
Pushed Authorization Request:
client_idclient_assertionclient_assertion_typecode_challengecode_challenge_methodresponse_typeredirect_uriscopestatenonceacr_valuesdpop_jkt
Authorization Endpoint:
client_idrequest_uri
Refer to Pushed Authorization Request and Authorization Endpoint for more details.
ID Token
Flat, custom structure.
subencapsulating user information.entityInfoencapsulating entity information.userInfoencapsulating acting user's information.
Structured, hierarchical structure.
subrepresenting subject (entity / user) identifier.sub_attributesencapsulating profile information about the subject (entity on primary / root level, user on actor level).actencapsulating information about the subject acting on behalf of the primary subject.
Refer to ID Token section for more details.
Userinfo Endpoint
(Additional User / Authorization Data Retrieval)
Endpoint: /authorization-info.
Returns PascalCase keys:
AuthInfoTPAuthInfo
Format: JWS
Endpoint: /userinfo (Standard OIDC endpoint name)
Returns snake_case keys:
auth_infotp_auth_info
Format: JWE
Refer to Userinfo Endpoint for more details.
Error Handling
Legacy / custom error formats.
Standardised OAuth 2.0 Errors.
errorerror_descriptionstate
Scopes
Standard scopes (openid, authinfo, tpauthinfo)
Finer-grained scopes (e.g., entity.identity, user.identity, user.name), allowing for more precise data access control.
Refer to Scopes section for more details.
Migration Steps
Step 1: Review Client Configuration & Scopes
Review your client configuration on the Corppass Developer Portal to accommodate new mandatory parameters and scope changes.
Review Authentication Context Type: FAPI 2.0 introduces
authentication_context_typeas a mandatory parameter to define the transaction context.Configuration: Your client profile now includes a list of "Supported Authentication Context Types". Currently, only
APP_AUTHENTICATION_DEFAULTis supported. This value will be automatically backfilled for all existing clients.Constraint: During an authorization request, you can only request a context type that is explicitly configured for your client. For now, you must use
APP_AUTHENTICATION_DEFAULTvalue in your requests.
Refer to Authentication Context Parameters section for more details.
Review Scopes: FAPI 2.0 introduces new finer-grained scopes.
Configuration: To ensure continuity, Corppass will automatically backfill your client profile with finer-grained FAPI 2.0 scopes corresponding to your legacy access.
Review: Audit the backfilled scopes in your client configuration. Remove any that provides access to data your application no longer needs.
Refer to Scopes section for more details.
Review OIDC Redirect URLs: FAPI 2.0 now mandates the use of redirect URLs with
httpsscheme.Configuration: Make sure you have at least one usable redirect URL with
httpsscheme configured.Constraint: During an authorization request, you must provide a redirect URL with
httpsscheme, or else you will not be allowed to initialise authorization on FAPI 2.0.
Step 2: Retrieve new metadata from OpenID discovery endpoint
The OpenID Connect Discovery URL remains the same as the Legacy API.
New Endpoints Metadata: Query the existing Discovery URL to retrieve updated provider metadata. Configure your application to use the new endpoint values found in the metadata:
pushed_authorization_request_endpoint(New: Required for PAR)userinfo_endpoint(Replaces/authorization-info)
Refer to OpenID Discovery Endpoint for more details.
Step 3: Authorization Request
Significant Change: You can no longer construct the authorization URL directly in the browser. You need to implement Pushed Authorization Request (PAR).
Call the PAR Endpoint (
/request):Initiate the flow via a back-channel
POSTrequest.Include DPoP proof in the request.
Include the necessary OIDC parameters (e.g.,
client_id,scope,redirect_uri) along with the new mandatory fields (e.g.,client_assertion,code_challenge,authentication_context_type).Corppass returns a
request_urithat references your payload.
Browser Redirect to Authorization Endpoint (
/authorize):Redirect the user to the Authorization Endpoint using only
client_idand the returnedrequest_urireturned in the previous step.This replaces the Legacy method of exposing sensitive parameters directly in the browser URL.
Refer to Pushed Authorization Request (PAR) Endpoint for more details.
Step 4: Token Exchange
The Token Endpoint (/token) now enforces strict security proofs.
Prepare the Request:
Mandatory Client Authentication: Use
client_assertion(Private Key JWT).Mandatory PKCE: Include the
code_verifiermatching thecode_challengefrom PAR.Mandatory DPoP: Include a
DPoPHTTP header. The public key in this header will be bound to the resulting Access Token.
Handle the Response:
Access Token: Store the opaque token for subsequent API calls where needed.
Note: The token is sender-constrained; you must use the same DPoP private key from the request to sign the DPoP header when using this token later.
ID Token: Decrypt the JWE using your private encryption key to retrieve the signed payload, then validate the signature. See Step 5.
Refer to Token Endpoint for more details.
Step 5: Decrypt & Map ID Token
The ID Token is an Encrypted JWT (JWE).
Decrypt: Use your private encryption key (from Step 2) to decrypt the token.
Validate: Verify the signature of the decrypted payload using Corppass's public signing key.
Map New Claims: Update your parsing logic to the new hierarchical structure.
Entity Details
entityInfo.*
sub, sub_attributes.*
User Details
sub
userInfo.*
act.*
Refer to ID Token section for more details.
Step 6: Userinfo Endpoint
This is applicable if your application fetches additional user / authorization data.
Use the new userinfo URL
In the legacy API, this was available on the
/authorization-infoendpoint.In the FAPI 2.0 API, this is served on the
/userinfoendpoint (the metadata retrieved in Step 2, underuserinfo_endpoint).
Update Authorization header prefix to be DPoP instead of Bearer
In the legacy API, the Authorization header would have been sent as a bearer token:
In the FAPI 2.0 API, this needs to be sent with a
DPoPprefix:
Handle new response format
Update your JSON parser to handle snake_case keys (e.g.,
auth_infoinstead ofAuthInfo).Since the response is now returned as a JWE, you must decrypt the payload using your registered private key before processing the claims.
Refer to Userinfo Endpoint for more details.
Step 7: Error Handling
Ensure your application handles standard OAuth 2.0 error parameters (error, error_description, state):
Handle Redirect URI: Error query parameters on the callback URL (e.g.,
https://client.com/cb?error=access_denied&error_description=...)Handle API Response: JSON bodies for
/request,/token, oruserinfofailures.
Refer to the respective endpoints for more details.
Last updated