| Working Group: | FAPI | ||
| Authors: | Nat Sakimura (Nat.Consulting) |
John Bradley (Yubico) |
Edmund Jay (Illumila) |
| Date: | November 06, 2025 |
This document is not an OIDF International Standard. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an International Standard.
Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.
The OpenID Foundation (OIDF) promotes, protects and nurtures the OpenID community and technologies. As a non-profit international standardizing body, it is comprised by over 160 participating entities (workgroup participant). The work of preparing implementer drafts and final international standards is carried out through OIDF workgroups in accordance with the OpenID Process. Participants interested in a subject for which a workgroup has been established have the right to be represented in that workgroup. International organizations, governmental and non-governmental, in liaison with OIDF, also take part in the work. OIDF collaborates closely with other standardizing bodies in the related fields.
Final drafts adopted by the Workgroup through consensus are circulated publicly for the public review for 60 days and for the OIDF members for voting. Publication as an OIDF Standard requires approval by at least 50% of the members casting a vote. There is a possibility that some of the elements of this document may be subject to patent rights. OIDF shall not be held responsible for identifying any or all such patent rights.
The keywords "shall", "shall not", "should", "should not", "may", and "can" in this document are to be interpreted as described in ISO Directive, Part 2 [ISODIR2]. These keywords are not used as dictionary terms such that any occurrence of them shall be interpreted as keywords and are not to be interpreted with their natural language meanings. They are all in lower case to rule out the dictionary meaning use of these words so that they can be translated easily. Following is a summary of the keywords.
| Kind | Keywords |
|---|---|
| Requirement | shall, shall not |
| Recommendation | should, should not |
| Permission | may |
| Possibility | can, cannot |
FAPI 1.0 consists of the following parts:
These parts are intended to be used with RFC6749, RFC6750, RFC7636, and OIDC.
FAPI is a highly secured OAuth profile that aims to provide specific implementation guidelines for security and interoperability. The FAPI security profile can be applied to APIs in any market area that requires a higher level of security than provided by standard OAuth or OpenID Connect. Among other security enhancements, this specification provides a secure alternative to screen scraping. Screen scraping accesses user’s data and functions by impersonating a user through password sharing. This brittle, inefficient, and insecure practice creates security vulnerabilities which require institutions to allow what appears to be an automated attack against their applications.
This document is Part 2 of FAPI Security Profile 1.0 that specifies an advanced security profile of OAuth that is suitable to be used for protecting APIs with high inherent risk. Examples include APIs that give access to highly sensitive data or that can be used to trigger financial transactions (e.g., payment initiation). This document specifies the controls against attacks such as: authorization request tampering, authorization response tampering including code injection, state injection, and token request phishing. Additional details are available in the security considerations section.
Although it is possible to code an OpenID provider and relying party from first principles using this specification, the main audience for this specification is parties who already have a certified implementation of OpenID Connect and want to achieve a higher level of security. Implementers are encouraged to understand the security considerations contained in Section 8.7 before embarking on a ‘from scratch’ implementation.
This part of the document specifies the method of
This document is applicable to higher risk use cases which includes commercial and investment banking and other similar industries.
The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
Part1 FAPI Security Profile 1.0 - Part 1: Baseline
RFC6749 The OAuth 2.0 Authorization Framework
RFC7636 Proof Key for Code Exchange by OAuth Public Clients
OIDC OpenID Connect Core 1.0
RFC8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
JARM JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)
RFC9126 OAuth 2.0 Pushed Authorization Requests
RFC9101 OAuth 2.0 JWT Secured Authorization Request
ISO29100 ISO/IEC 29100 Information technology — Security techniques — Privacy framework
For the purpose of this document, the terms defined in RFC6749, RFC6750, RFC7636, OIDC and ISO29100 apply.
| API | application programming interface | |
| CSRF | cross site request forgery | |
| DN | distinguished name | |
| HTTP | hyper text transfer protocol | |
| HTTPS | hypertext transfer protocol secure | |
| JAR | JWT-secured authorization request | |
| JARM | JWT secured authorization response mode | |
| JOSE | javascript object signing and encryption | |
| JSON | javascript object notation | |
| JWE | JSON web encryption | |
| JWK | JSON web key | |
| JWKS | JSON web key sets | |
| JWS | JSON web signature | |
| JWT | JSON web token | |
| MTLS | mutual transport layer security | |
| OIDF | OpenID foundation | |
| PAR | pushed authorization requests | |
| PII | personally identifiable information | |
| PKCE | proof key for code exchange | |
| REST | representational state transfer | |
| RP | relying party | |
| TLS | transport layer security | |
| URI | uniform resource identifier | |
| URL | uniform resource locator |
API resources may contain sensitive data and/or have increased security requirements. In order to fulfill different security needs, FAPI Security Profile 1.0 defines an advanced profile that is beyond the baseline security requirements defined in the Part 1: Baseline document.
As a profile of the OAuth 2.0 Authorization Framework, this document mandates the following for the advanced profile of the FAPI Security Profile 1.0.
A confidential client shall support the provisions specified in clause 5.2.3 and 5.2.4 of FAPI Security Profile 1.0 - Part 1: Baseline, except for RFC7636 support.
In addition, the confidential client
request or request_uri
parameter as defined in Section 6 of OIDC in
the authentication request;response_type, client_id, and
scope parameters/values using the OAuth 2.0 request syntax
as required by Section 6.1 of the OpenID Connect specification if not
using RFC9126;aud claim in the request object as the
authorization server’s issuer identifier URL;exp claim in the request object that has
a lifetime of no longer than 60 minutes;nbf claim in the request object;S256 as the code challenge method if using [PAR];
andclient_id
parameter/value using the OAuth 2.0 request syntax to the authorization
endpoint, as required by Section 5 of [JAR], if using [PAR].In addition, if the response_type value
code id_token is used, the client
openid into the
scope parameter in order to activate OIDC
support;s_hash value is equal to the value
calculated from the state value in the authorization
response in addition to all the requirements in 3.3.2.12 of OIDC;
and NOTE: This enables the client to verify that the
authorization response was not tampered with, using the ID Token as a
detached signature.In addition, if the response_type value
code is used in conjunction with the
response_mode value jwt, the client
The FAPI endpoints are OAuth 2.0 protected resource endpoints that return protected information for the resource owner associated with the submitted access token.
The protected resources supporting this document
The client supporting this document shall support the provisions specified in clause 6.2.2 of FAPI Security Profile 1.0 - Part 1: Baseline.
As a profile of the OAuth 2.0 Authorization Framework, this specification references the security considerations defined in Section 10 of RFC6749, as well as RFC6819 - OAuth 2.0 Threat Model and Security Considerations, which details various threats and mitigations. The security of OAuth 2.0 has been proven formally - under certain assumptions - in OAUTHSEC. A detailed security analysis of FAPI Security Profile 1.0 can be found in FAPISEC.
There is no way that the client can find out whether the resource access was granted for a bearer or sender-constrained access token. The two differ in the risk profile and the client may want to differentiate them. The protected resources that conform to this document differentiate them. The protected resources that conform to this document shall not accept a bearer access token. They shall only support sender-constrained access tokens via RFC8705.
As confidential information is being exchanged, all interactions shall be encrypted with TLS (HTTPS).
Section 7.1 of FAPI Security Profile 1.0 - Part 1: Baseline shall apply, with the following additional requirements:
authorization_endpoint, the authorization
server may allow additional cipher suites that are permitted by the
latest version of BCP195, if necessary to
allow sufficient interoperability with users’ web browsers or are
required by local regulations. NOTE: Permitted cipher
suites are those that BCP195 does not explicity
say MUST NOT use.For JWS, both clients and authorization servers
PS256 or ES256 algorithms;RS256); andnone.For JWE, both clients and authorization servers
RSA1_5 algorithm.To achieve the full security benefits, it is important the implementation of this specification, and the underlying OpenID Connect and OAuth specifications, are both complete and correct.
The OpenID Foundation provides tools that can be used to confirm that an implementation is correct:
https://openid.net/certification/
The OpenID Foundation maintains a list of certified implementations:
https://openid.net/developers/certified/
Deployments that use this specification should use a certified implementation.
An attacker could prepare an authorization request URL and trick a victim into authorizing access to the requested resources, e.g. by sending the URL via e-Mail or utilizing it on a fake site.
OAuth 2.0 prevents this kind of attack since the process for obtaining the access token (code exchange, CSRF protection etc.) is designed in a way that the attacker will be unable to obtain and use the token as long as it does not control the victim’s browser.
However, if the API allows execution of any privileged action in the course of the authorization process before the access token is issued, these controls are rendered ineffective. Implementers of this specification therefore shall ensure any action is executed using the access token issued by the authorization process.
For example, payments shall not be executed in the authorization process but after the client has exchanged the authorization code for a token and sent an “execute payment” request with the access token to a protected endpoint.
This profile requires both clients and authorization servers to
verify payloads with keys from the other party. The authorization server
verifies request objects and private_key_jwt assertions.
The client verifies ID Tokens and authorization response JWTs. For
authorization servers, this profile strongly recommends the use of JWKS
URI endpoints to distribute public keys. For clients this profile
recommends either the use of JWKS URI endpoints or the use of the
jwks parameter in combination with RFC7591 and RFC7592.
The definition of the authorization server jwks_uri can
be found in RFC8414,
while the definition of the client jwks_uri can be found in
RFC7591.
In addition, this profile
jwks_uri endpoints shall be served over
TLS;x5u and
jku should not be used; andkid.The use of RFC8705 for client authentication and sender constraining access tokens brings significant security benefits over the use of shared secrets. However in some deployments the certificates used for RFC8705 are issued by a certificate authority at an organization level rather than a client level. In such situations it may be common for an organization with multiple clients to use the same certificates (or certificates with the same DN) across clients. Implementers should be aware that such sharing means that a compromise of any one client, would result in a compromise of all clients sharing the same key.
JWK sets should not contain multiple keys with the same
kid. However, to increase interoperability when there are
multiple keys with the same kid, the verifier shall
consider other JWK attributes, such as kty,
use, alg, etc., when selecting the
verification key for the particular JWS message. For example, the
following algorithm could be used in selecting which key to use to
verify a message signature:
kid that matches the kid
in the JOSE header;alg,
use, kty, or crv that corresponds
to the message being verified.There are many factors to be considered in terms of privacy when implementing this document. However, since this document is a profile of OAuth and OpenID Connect, all of them are generic and applies to OAuth or OpenID Connect and not specific to this document. Implementers are advised to perform a thorough privacy impact assessment and manage identified risks appropriately.
NOTE: Implementers can consult documents like ISO29100 and ISO29134 for this purpose.
Privacy threats to OAuth and OpenID Connect implementations include the following:
policy_url or by other means can be inappropriate.These can be mitigated by choosing appropriate options in OAuth or
OpenID Connect, or by introducing some operational rules. For example,
“Attacker observing personal data in authorization request” can be
mitigated by either using authorization request by reference using
request_uri or by encrypting the request object. Similarly,
“Attacker observing personal data in authorization endpoint response”
can be mitigated by encrypting the ID Token or JARM response.
This specification adds the following values to the “JSON Web Token Claims” registry established by RFC7519.
The following are non-normative examples of various objects compliant with this specification, with line wraps within values for display purposes only.
The examples signed by the client may be verified with the following JWK:
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "client-2020-08-28",
"alg": "PS256",
"n": "i0Ybm4TJyErnD5FIs-6sgAdtP6fG631FXbe5gcOGYgn9aC2BS2h9Ah5cRGQpr3aLLVKCRWU6
HRfnGseUBOejo57vI-kgab2YsQJSwedAxvtKrIrJlgKn1gTXMNsz-NQd1LyLSV50qJVEy5l9RtsdDzOV
8_kLCbzroEL3rc00iqVZBcQiYm8Bx4z0G8LYZ4oMJAG462Mf_znJkKXsuSIH735xnSmx74CC8TOe6G-V
0Wi_wVSJ9bHPphSki_kWUtjVGcnyjYuQVE0LRj3qrGPAX9bsVKSqs8T9AM41TB9oV5Sjz5YhggwICvvC
CGwil9qhUoQRkeXtWuGCfvCSeTdawQ"
}The examples signed by the server may be verified with the following JWK:
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "server-2020-08-28",
"alg": "PS256",
"n": "pz6g0h7Cu63SHE8_Ib4l3hft8XuptZ-Or7v_j1EkCboyAEn_ZCuBrQOmpUIoPKrA0JNWK_fF
eZ2q1_26Gvn3E4dQlcOWpiWkKmxAhYCWnNDv3urVgldDp_kw0Dx2H8yn9tmFW28E_WvrZRwHEF5Czigb
xlmFIrkniMHRzjyYQTHRU0gW3DRV9MrQQrmP71McvfLPeMBPPgsHgLo7KmUBDoUjsgnwgycEOWPm8MWJ
13dpTsVnoWNIFQqVNz1L5pRU3Uoknl0MGoE6v0M9lfgQgzxIX9gSB1VGp5zZRcsnZGU3MFpwBhOWwiCU
wqztoX0H5P0g7OWocspHrDn6YOgxHw"
} eyJraWQiOiJjbGllbnQtMjAyMC0wOC0yOCIsImFsZyI6IlBTMjU2In0.eyJhdWQiOiJodHRwczpcL1wv
ZmFwaS1hcy5leGFtcGxlLmNvbVwvIiwibmJmIjoxNTk0MTQwMDMwLCJzY29wZSI6Im9wZW5pZCBwYXlt
ZW50cyIsImlzcyI6IjUyNDgwNzU0MDUzIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUgaWRfdG9rZW4iLCJy
ZWRpcmVjdF91cmkiOiJodHRwczpcL1wvZmFwaS1jbGllbnQuZXhhbXBsZS5vcmdcL2ZhcGktYXMtY2Fs
bGJhY2siLCJzdGF0ZSI6IlZnU1VJRW5mbG5EeFRlMXZBdHI1NG8iLCJleHAiOjE1OTQxNDAzOTAsIm5v
bmNlIjoiN3hEQ0h2aXVQTVNYSklpZ2tIT2NEaSIsImNsaWVudF9pZCI6IjUyNDgwNzU0MDUzIn0.VSo5
VWN3lOiCry2KItU5RI62i9KG2KQlBdpsDT0DI0vSMK-q85aJZvsMiHBNBv1PQ9qAWmU3oJS-yi-Ks_lD
lP6lIMFrOL_Ym3VxJ_SM6lrc8JSZH_nNx6sqxPpeMQTF4SFPx30vHrlBVJaCGfnCMVC6Nbzwef0vOEpN
ixZT-9cwa3dZ-pddAyt58dKGxS76NR_wxdBaSKN0AfPoui0HSSaAkIdRds21NKIOf4r9BjV5lr1Oi-4I
JUQp-xdeLCPD3fD6Y-TJbHFToJ4FsQzglN83BfNYaeXV_yTtK7yeSw2R-ee0b3uMV0iD1ee77b7bbcjR
3msLISFjM40d9Pv8qQ
which when decoded has the following body:
{
"aud": "https://fapi-as.example.com/",
"nbf": 1594140030,
"scope": "openid payments",
"iss": "52480754053",
"response_type": "code id_token",
"redirect_uri": "https://fapi-client.example.org/fapi-as-callback",
"state": "VgSUIEnflnDxTe1vAtr54o",
"exp": 1594140390,
"nonce": "7xDCHviuPMSXJIigkHOcDi",
"client_id": "52480754053"
} eyJraWQiOiJzZXJ2ZXItMjAyMC0wOC0yOCIsImFsZyI6IlBTMjU2In0.eyJhdWQiOiI0NjkxODA2NDgw
MzkwNTEiLCJjb2RlIjoiendrR2FjOWp1TFg4RjhmcmFwRElTaTNLMkZ3bG40cXh3eWZOSUkzQ2p6MCIs
ImlzcyI6Imh0dHBzOlwvXC9mYXBpLWFzLmV4YW1wbGUuY29tXC8iLCJzdGF0ZSI6IlZnU1VJRW5mbG5E
eFRlMXZBdHI1NG8iLCJleHAiOjE1OTQxNDEwOTB9.k_3df0dIDX6watKxQkzAHOLgf4FBi_xIPN-n8aT
5hMX3gaBbeDqdUA5NR764L4ugdDgXyQm8dNcZrZldKIPfSfRcjBTtSx9PEdiffn_xUkwnS18YNAfEoq0
HjvkOQ59F21ImKn113kon00uC2dqBGByRrZcaUYOnvW2DdHCVA0VTW2je5nzbI02z9csLa8uGGGwjWRP
Ec9j9bvR1Adc2m2Z-o0QCRIBl81sZz6_AnE-wPTw-KZFQBs3FgS-r0FDYOzE7FHIMgDBSKAg1J5tWY3J
wRuIv_oAbYdSlxdYzrbFQ9grX4MA0p7pk5lS-kwnN845GZ2k1_yaOLtYYyvRFrw
which when decoded has the following body:
{
"aud": "469180648039051",
"code": "zwkGac9juLX8F8frapDISi3K2Fwln4qxwyfNII3Cjz0",
"iss": "https://fapi-as.example.com/",
"state": "VgSUIEnflnDxTe1vAtr54o",
"exp": 1594141090
} eyJraWQiOiJjbGllbnQtMjAyMC0wOC0yOCIsImFsZyI6IlBTMjU2In0.eyJzdWIiOiI1MjQ4MDc1NDA1
MyIsImF1ZCI6Imh0dHBzOlwvXC9mYXBpLWFzLmV4YW1wbGUuY29tXC9hcGlcL3Rva2VuIiwiaXNzIjoi
NTI0ODA3NTQwNTMiLCJleHAiOjE1OTQxNDAxNTEsImlhdCI6MTU5NDE0MDA5MSwianRpIjoiNHZCY3RN
U2tLNHdmdU91aTlDeWMifQ.h3i0k2DWc7V6WEiinHAsse-pOFiWxe5kD4KetdGX65Q03orj0Fh6EWfdE
AntCrOodUsypKjM1ia3evbQmsSkhIb4YK5s53hYYtEbJC_eG9jFnVc4ki7Qc5O-1K-D80w7WT1UI--Ih
Ku-i22Ai_nMed-71UWLHcPi7W20SCroPHXfaLiFj_TOsr7I8h7VNsoa7P3-coHlXT5q4cMjIA7t8cRag
sGtKlIgwdFYySlimtSESDM0U-_NUPperTgnF8FVn7SqtizBJneZNAWwSLJD9AVsnMOH6kOeNLtpopsru
Dcs54S_aIlroP-BdiHw9R1qRTIVSoX3k_EStvoWSf8NcQ
which when decoded has the following body:
{
"sub": "52480754053",
"aud": "https://fapi-as.example.com/api/token",
"iss": "52480754053",
"exp": 1594140151,
"iat": 1594140091,
"jti": "4vBctMSkK4wfuOui9Cyc"
}The following people contributed to this document:
Copyright (c) 2023 The OpenID Foundation.
The OpenID Foundation (OIDF) grants to any Contributor, developer, implementer, or other interested party a non-exclusive, royalty free, worldwide copyright license to reproduce, prepare derivative works from, distribute, perform and display, this Implementers Draft or Final Specification solely for the purposes of (i) developing specifications, and (ii) implementing Implementers Drafts and Final Specifications based on such documents, provided that attribution be made to the OIDF as the source of the material, but that such attribution does not indicate an endorsement by the OIDF.
The technology described in this specification was made available from contributions from various sources, including members of the OpenID Foundation and others. Although the OpenID Foundation has taken steps to help ensure that the technology is available for distribution, it takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this specification or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any independent effort to identify any such rights. The OpenID Foundation and the contributors to this specification make no (and hereby expressly disclaim any) warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to this specification, and the entire risk as to implementing this specification is assumed by the implementer. The OpenID Intellectual Property Rights policy requires contributors to offer a patent promise not to assert certain patent claims against other contributors and against implementers. The OpenID Foundation invites any interested party to bring to its attention any copyrights, patents, patent applications, or other proprietary rights that may cover technology that may be required to practice this specification.