Authentication

Establishing who is calling: validating credentials or tokens, resolving the user, and making that identity available to the application. Authorization decides what that identity may do; identity provisioning manages its lifecycle across systems.

Overview

InCAPassessed

Establishing who is calling — validating a token, resolving the user and their roles, and making that available for the rest of the request. Taking SAP Cloud Identity Services as the identity interface for everything SAP makes it SAML 2 or OIDC against Identity Authentication rather than XSUAA alone, with the user lifecycle carried by SCIM 2 replication into each service. Authorization is still designed per system after that, since an S/4HANA role and a BTP role collection are different objects.

SAP SHIPSby design
Node.js →

@sap/cds Validates tokens and builds the security context for XSUAA and IAS, exposing the authenticated user to handlers as req.user.

Java →

com.sap.cds:cds-feature-identity The CAP Java feature that validates OAuth2 tokens from XSUAA and SAP Cloud Identity Services and builds the request's security context from them.

com.sap.cds:cds-feature-xsuaa The CAP Java feature that validated XSUAA-issued JWTs, published up to 2.10.7 before CAP Java 3.0 removed it in favour of com.sap.cds:cds-feature-identity.

Not covered: It stops at the platform identity providers. Anything else — custom IdPs, API keys, machine-to-machine patterns outside BTP — is yours to build. capire's own overview says CAP cannot guarantee end-to-end product security across all application layers by default; the platform's transport security and the application's own code are outside it.

Built into @sap/cds
SourceAuthenticationchecked
InBTP/BAIPassessed

On BTP the concern splits three ways, and the pieces are not alternatives. SAP Authorization and Trust Management is the OAuth server that issues the JWT an application checks; Cloud Identity Services is the login itself, the user store or the federation to a corporate identity provider behind it; and carrying that identity onward, to a resource app or into the customer's own network, is a third question with its own entries. An application binds the first and usually inherits the second.

SAP SHIPS

SAP Authorization and Trust Management is the OAuth 2.0 authorization server: a subaccount cross-configures trust with an identity provider, the provider confirms the user with a SAML bearer assertion, and the service determines that user's authorizations and signs the JWT an application reads; an API client authenticates against the service directly instead, with no user present. The identity provider is Cloud Identity Services where a tenant has been asked for, and SAP ID service, SAP's own tenant, where nobody has changed the trust. @sap/approuter is the standard implementation of the gateway: it starts the authentication, checks for cross-site request forgery and forwards each request to the resource apps with the user information.

Not covered: At the token it signs. The gateway does not hide the backends: its own README states that they stay directly reachable and must validate the JWT and check the scopes themselves, so a request is accepted or refused in the resource app and not on the platform. SAP ID service, the identity provider a subaccount trusts until someone changes that, has no mechanism to enforce multifactor authentication on its users. What a validated caller may then do is authorization, a different service and a different question.

core-and-community is a assessment of the corpus: SAP's services and the router behind this door, and independently maintained packages that sit on top of the SAP Authorization and Trust Management service and Identity Authentication. The pages checked state what the platform does and where the application takes over; none states an intent, which is why the relationship is left unassessed rather than called narrow by design.

THE COMMUNITY ADDS

Independently maintained packages wrap the OAuth server and the identity provider for cases their own documentation does not cover. @arc-mcp/xsuaa-auth puts the XSUAA OAuth flow, dynamic client registration and bearer verification in front of an MCP server's HTTP route, @saptools/cf-xsuaa prints a deployed Cloud Foundry app's own client_credentials token out of its binding, and sap-mcp-auth completes the SAP Identity Authentication login in a browser and keeps the session for a program.

InABAPassessed

On ABAP the repositories here face outward, the system authenticating itself to someone else's API: a JWT from abap_jwt_generator, Azure through SAP's own OAuth 2.0 client in abapOAuthAzure by Gregor Wolf, NTLM in abapNTLM by Lars Hvam, and AWS Signature v4 in abap-aws-sigv4. abap-pwnedpasswords is the inbound one, checking a password against the Pwned Passwords breach list.

SAP SHIPS

AS ABAP carries an OAuth 2.0 client, configured in transaction OA2C_CONFIG, that obtains an access token from an external provider such as Google Cloud Platform or Microsoft Azure and renews it with a refresh token. The flows it offers are the authorization code flow and the SAML 2.0 bearer assertion flow.

Not covered: At those two flows in the release checked. A self-signed JWT, an NTLM handshake with a Windows server and an AWS Signature v4 request are not among them, and each is written in ABAP by a repository in this batch.

Checked against the SAP NetWeaver 7.5 documentation; later ABAP Platform releases were not checked for further flows. The community answers the outbound direction, the ABAP system proving who it is to another API, and the inbound side with a logon ticket decoder such as decodesapsso2 by Marcello Urbani, which does not validate the ticket. abap_cloud_platform obtains a token for an ABAP service instance from outside it, and SAP's Cloud Connector forwards the cloud user's identity to an on-premises system.

InUI5assessed

A UI5 app authenticates nobody itself: the server that delivers it, an application router, a launchpad or the ABAP server, asks for the login. On this door the question is the dev server, which has to put a login in front of the app or carry one to the backend the app calls.

SAP SHIPS

SAP's backend-proxy-middleware, a custom middleware for the UI5 dev server, authenticates the requests it forwards to a backend: it uses credentials maintained with SAP Fiori tools, runs the OAuth routine of the ABAP environment on SAP BTP when scp is set, and supports a reentrance ticket as the authentication type in VS Code.

Not covered: At the backend call. Its options describe how the proxied requests are authenticated; the README describes no login in front of the app the dev server serves.

THE COMMUNITY ADDS

No community artifact is documented here.

Artifacts23

Group by23 of 23 artifacts
ArtifactSignals
Apps2
@sap/approuterSAP's Node.js application router in front of business applications
Signals
none
Cloud ConnectorSAP's on-premises agent linking SAP BTP to customer-network systems
Signals
none
CDS plugins2
cds-azure-adAzure AD and Azure AD B2C authentication strategy for CAP
Signals
Functional boundary
cds-common-jwt-supportJWT authentication for CAP without xsuaa or xssec
Signals
Functional boundary
CLI tools1
@saptools/cf-xsuaaOAuth2 token fetcher for a Cloud Foundry app's XSUAA binding
Signals
none
Packages14
@arc-mcp/xsuaa-authXSUAA authentication stack for an MCP server on SAP BTP
Signals
Functional boundary
@marianfoo/sap-mcp-authBrowser login and session module for SAP MCP servers
Signals
Functional boundary
@sap/cdsCAP Node.js runtime
Signals
none
@sap/xssecToken validation and security context for XSUAA and IAS
Signals
none
abap_cloud_platformTypeScript library reaching ABAP service instances on Cloud Foundry
Signals
none
abap_jwt_generatorGenerates signed JSON Web Tokens in ABAP
Signals
Quiet
abap-aws-sigv4Signs outbound HTTP calls to AWS APIs with AWS Signature Version 4, directly from ABAP.
Signals
Quiet
abap-pwnedpasswordsChecks passwords against Have I Been Pwned from ABAP
Signals
none
abap2oauth2ABAP API for OAuth 2.0 authentication
Signals
Quiet
abapNTLMHTTP NTLM client for ABAP
Signals
none
abapOAuthAzureOA2C_SPECIFICS implementation for Microsoft Azure OAuth 2.0 in ABAP
Signals
Quiet
com.sap.cds:cds-feature-identityOAuth2 token validation from XSUAA and SAP Cloud Identity Services
Signals
none
com.sap.cds:cds-feature-xsuaaFormer XSUAA JWT validation for CAP Java, removed in CAP Java 3.0
Signals
none
decodesapsso2TypeScript decoder for MYSAPSSO2 logon tickets
Signals
none
Services4
Cloud Identity ServicesIdentity Authentication and Identity Provisioning as one tenant
Signals
none
OAuth 2.0 on SAP BTPOAuth 2.0 grant flows for applications and APIs in Neo regions
Signals
none
SAP Authorization and Trust Management serviceOAuth server issuing JWTs and holding scopes for BTP apps
Signals
none
SAP Customer Identity and Access Management for B2CRegistration, login and consent for customer-facing sites
Signals
none

Tasks4Beta

Shown workingCoversCovers, under conditionsLikely, from its propertiesNot assessed
Get a token for a protected BTP endpoint with no user signed in2 covers, 1 under conditions

A script, a job or another service calls a protected endpoint of a deployed SAP BTP application and is accepted, with nobody at a browser.

Obtaining the token and keeping it fresh. What the called endpoint then lets the client do is authorization, and carrying a named person's identity is a separate outcome.

CoversSAP Authorization and Trust Management serviceIssues the token. SAP's architecture page separates the API client from the browser user: the client gets its credentials from this service and authenticates against it directly, and the client credentials grant is among the grant types the environment supports.

Remaining work: Create the service instance and its OAuth client, keep the client secret somewhere the caller can read, call the token endpoint on each run and handle expiry. The endpoint being called still validates the JWT and checks its scopes itself.

Open artifact →

Covers@saptools/cf-xsuaaReads the XSUAA binding out of a deployed Cloud Foundry app and prints a client_credentials token for that app, which is the token a protected endpoint of it expects rather than the personal token cf oauth-token returns.

Remaining work: Install it on Node.js 20 or later with the cf CLI on the PATH, and supply SAP_EMAIL and SAP_PASSWORD for the first secret fetch. Nothing about the called endpoint's own validation changes.

Open artifact →

Covers, under conditionsOAuth 2.0 on SAP BTPGrants an access token on the client's credentials alone, with no user interaction, which the catalogue record names for protecting an API or an IoT device.

Conditions: The one plan in the Discovery Center record is listed in regions marked Neo and in no Cloud Foundry environment. SAP states the service is being removed from the Eligible Cloud Services List on December 31, 2028 in those regions.

Remaining work: Check the entitlement before anything else: the plan has to exist in the region the application runs in, and a subscription has an end date.

Open artifact →

Put the company's own identity provider behind a BTP application's login2 covers

People sign in to a BTP application with their corporate account, under the company's own password and multifactor policy rather than SAP's.

The trust and the federation that make the corporate account the one that logs in. Mapping its attributes to what an application expects, and replicating the users themselves, are named here and not assessed.

CoversCloud Identity ServicesStands between the application and the company's own provider: the users are hosted in its tenant or read from the corporate provider behind it, and the password and authentication policies enforced are the company's own.

Remaining work: Ask for a tenant, connect the corporate provider to it, and map the attributes the provider returns to the ones the applications expect.

Open artifact →

CoversSAP Authorization and Trust Management serviceHolds the subaccount's side of the trust. Identity federation is what frees the platform and its applications from storing credentials and authenticating people themselves, and the trust is established by cross-configuring the endpoints of both systems.

Remaining work: Cross-configure the endpoints, and move the subaccount off the trust it starts with: that is SAP ID service, where SAP states there is no mechanism to enforce multifactor authentication on its users.

Open artifact →

Reach a system in the customer's own network as the signed-in user1 shown working, 1 covers, 1 likely

An application on SAP BTP calls a system inside the customer's network and that system sees the person who signed in, not a shared service user.

Carrying the identity to the on-premise system. What that system then permits the person to do is its own, and the cloud login itself is a separate outcome.

Shown workingCloud ConnectorForwards the cloud user's identity to the internal system instead of a password of its own. Principal propagation is one of three authentication types it offers towards an internal system, beside basic authentication and technical user propagation.

Conditions: Trust has to be configured explicitly to the cloud entities whose user tokens are accepted as valid. The calling application's destination configuration decides which of the three authentication types is used.

Remaining work: Install and register the connector, add the access control entry for the system, and set up the certificate and the subject pattern the internal system resolves a logon name from.

Open artifact →

Covers@arc-mcp/xsuaa-authDoes the cloud half of this for an MCP server: it resolves a destination with the verified user's own JWT and returns the per-user credentials and a proxy descriptor for the Cloud Connector, so the call leaves as that user rather than as a service account.

Remaining work: Assemble the outgoing request. Its README leaves the headers, the cookies and the forward-proxy call to the consuming server, and the destination and the connector still have to be configured as above.

Open artifact →

Likely, from its properties@sap/approuter
Sign a browser user in to a BTP application and have its backends accept the result2 shown working, 1 covers, 1 under conditions

A person opens a deployed SAP BTP application in a browser, logs in once, and each of the application's own backend endpoints accepts the request as that person.

The login and the token the backends read. Which role collections the person holds is authorization, and reaching a system outside the subaccount is a separate outcome.

Shown working@sap/approuterIs the single entry point: it starts the authentication for the routes that need it, checks for cross-site request forgery, serves the static content and forwards each request onward with the user information.

Remaining work: The backends. Its own README states that they stay directly reachable past the router and must validate the JWT and check the scopes themselves, so the router alone does not make an endpoint safe to expose.

Open artifact →

Shown workingSAP Authorization and Trust Management serviceTurns the successful login into the token the application reads. The identity provider's SAML bearer assertion is presented to this service, it determines that user's authorizations, and it signs the JWT with the key whose public half arrives in each app's binding.

Remaining work: Cross-configure the trust with the identity provider, declare the application's authorizations in its security descriptor, and bind every app of the application to the one service instance.

Open artifact →

CoversCloud Identity ServicesAuthenticates the person. It is the identity provider a subaccount trusts, and the place single sign-on across the SAP applications in the landscape is decided.

Remaining work: Ask for a tenant and establish the trust: a subaccount trusts SAP ID service until someone changes that.

Open artifact →

Covers, under conditions@sap/xssecIs the security client library the resource app uses to do what the router leaves to it: authenticate the user from the JWT the BTP security services issued, and build the security context the app's own checks read.

Conditions: The resource app runs on Node.js: the module's README names Node.js applications, and the Java runtime is a separate module that was not read in this pass.

Remaining work: Wire it into each endpoint and write the scope checks; the library validates the token and does not decide what the caller may do.

Open artifact →

Content46

Group by46 of 46 pieces
Piece, what it offers
SAP Just Became AI-Agent Ready — Here's a Step-by-Step MCP Walkthrough
SAP Community, Piyush_003, Blog
Agentic AI & AI Agents
SAP Architecture Center, SAP Architecture Center, Reference architectureThe reasoningA reference
Named-User Attribution Across BTP Subaccounts: A Two-Hop IAS Token Exchange for Cloud Integration
SAP Community, agnissh, Blog
Show 40 more
Building a Pro-Code Agent on SAP BTP — Part 3: Joule Integration via A2A
SAP Community, rodfior, Blog
Connecting a Custom MCP Server to Joule Work Desktop: A Seamless and Secure Authentication Flow
SAP Community, Siddhartha Routh, Blog
From SAP Integration Suite iFlow to MCP Tools: Exposing OData APIs to AI Agents
SAP Community, Nacho Muñoz Álvarez, Blog
Principal Propagation from BTP Web App to S/4HANA via SAP Integration Suite
SAP Community, Joni, Blog
Standardized OIDC API Access to SAP S/4HANA via SAP API Management and Microsoft Entra ID
SAP Community, StigPraefcke, part 2 of 2, Blog
Standardized OIDC API Access to SAP SuccessFactors via SAP API Management and Microsoft Entra ID
SAP Community, StigPraefcke, part 1 of 2, Blog
Integrating and Extending Joule
SAP Architecture Center, SAP Architecture Center, Reference architectureThe reasoningA reference
SAP BTP Platform Technical User for CTMS Integration
SAP Community, Marudhu999, Blog
SAP Joule implementation in an S/4HANA private cloud 3 system landscape
SAP Community, Arunrajj, Blog
How to Access SAP Cloud Logging Service Dashboards Using IAS SAML Authentication
SAP Community, Umezuki, Blog
Securing CAP Applications with SAP Cloud Identity Services and AMS
SAP Community, gopalanand, BlogThe reasoningRunnable code
Building Custom Authentication in SAP CAP
SAP Community, Michał Majer, BlogThe reasoningA recipe
Version drift
Joule Studioがリリースされたので早速CAPアプリを自然言語で操作するカスタムスキルを構築してみた
SAP Community, takayuki_tanaka, Blog
Identity and Access Management in SAP: Navigating SSO Across Web and On-Prem Landscapes
SAP Community, OxanaJ, Blog
Connect to Public Cloud API in Node.js via Authorisation Code
SAP Community, Egan, BlogThe reasoning
Guide to Process Automation APIs - Part I - Getting Started
SAP Community, Dan_Wroblewski, Blog
Making the Case for Enhanced REST Adapter in SAP Integration Suite
SAP Community, peter_ha3, Blog
Secure Service Consumption Across Hyperscalers
SAP Architecture Center, SAP Architecture Center, Reference architectureThe reasoningA reference
SAP IAM integration with SAP Cloud Identity Services
SAP Architecture Center, SAP Architecture Center, Reference architectureThe reasoningA reference
CAPM Basics - Part 2
SAP Community, archisman92, Blog
Enabling Authorization Policies in SAP Cloud Identity Services - IAS with AMS/CAP
SAP Community, Yogananda, BlogThe reasoningA recipe
Core changed
CAP for nodejs安全的暴露接口练习
SAP Community, ArthurYang, Blog
Why SAP Cloud Identity Matters for SAP Task Center: It’s About Trust and Global User ID
SAP Community, ivelinakiryakov, Blog
Perform SAP Principal Propagation with Microsoft Entra ID for SAP SuccessFactors!
SAP Community, Martin Pankraz, Blog
Simplifying SAP BTP Authentication in Pipelines with SAP Passport and Playwright
SAP Community, Marian Zeis, BlogThe reasoningRunnable code
Nice patch SAP! Revisiting your SAP BTP security measures after AI Core vulnerability fix
SAP Community, Martin Pankraz, Blog
XSUAA Based Authentication - Using Managed Approuter
SAP Community, rahul_rajagopal, BlogThe reasoningA recipe
Core changed
XSUAA Based Authentication - Using Standalone Approuter
SAP Community, rahul_rajagopal, BlogThe reasoningA recipe
Mobile First - Making the SAP IAS-based Proof Key for Code Exchange (PKCE) great again! 🎉
SAP Community, martinfrick, BlogThe reasoningRunnable code
SAP Build Process Automation – Use Principal Propagation in Actions sample: CAP Node.js Service
SAP Community, TJe, BlogThe reasoningA recipe
Core changed
SAP CAP JWT Token Flow in code
SAP Community, sandeepmalhotra, BlogThe reasoningRunnable code
Core changed
Architecting Complex Real Life Business Scenario on SAP BTP with ease [ Targeting Multiple backend S/4HANA Systems utilizing Principal Propagation ]
SAP Community, mohit_bansal3, BlogThe reasoning
Part2: Architecting Complex Real Life Business Scenario on SAP BTP with ease [ Targeting Multiple backend S/4HANA Systems utilizing Principal Propagation ]
SAP Community, mohit_bansal3, part 2 of 3, BlogThe reasoning
Part 3: Architecting Complex Real Life Business Scenario on SAP BTP with ease [ Targeting Multiple backend S/4HANA Systems utilizing Principal Propagation ]
SAP Community, mohit_bansal3, part 3 of 3, BlogThe reasoningA recipe
Core changed
SAP Business Technology Platform: Authorization and Trust Management Service
SAP Community, SekhuteTK, Blog
Execute [OAuth2 client credentials] protected REST request with SAP CAP Application
SAP Community, Lachmish, BlogThe reasoningA recipe
Core changed
Understanding security approaches in SAP CAP using XSUAA in node.js flavor and MTA.
SAP Community, balbinosoares, BlogThe reasoningA recipeRunnable code
Core changed
Use mocking to embrace auth in your domain model from the outset
SAP Developer Center, SAP, TutorialThe reasoningA recipe
Evolving the identity lifecycle for an AI-first future
SAP TechEd — session catalogue, TalkThe reasoning
How SAP secures enterprise AI agents with identity propagation
SAP TechEd — session catalogue, Gunnar Kosche, TalkThe reasoning
SAP Business Technology Platform: Authorization and Trust Management Service
SAP Community, SekhuteTK, Blog
How to Access SAP Cloud Logging Service Dashboards Using IAS SAML Authentication
SAP Community, Umezuki, Blog
Secure Service Consumption Across Hyperscalers
SAP Architecture Center, SAP Architecture Center, Reference architectureThe reasoningA reference
Why SAP Cloud Identity Matters for SAP Task Center: It’s About Trust and Global User ID
SAP Community, ivelinakiryakov, Blog
Show 5 more
Evolving the identity lifecycle for an AI-first future
SAP TechEd — session catalogue, TalkThe reasoning
How SAP secures enterprise AI agents with identity propagation
SAP TechEd — session catalogue, Gunnar Kosche, TalkThe reasoning
Road map: SAP Business AI Platform security and SAP Cloud Identity Services
SAP TechEd — session catalogue, TalkThe reasoning
What’s next for the core platform capabilities of SAP Business AI Platform
SAP TechEd — session catalogue, TalkThe reasoning
Use Free Tier to Subscribe to SAP Document AI Basic UI
SAP Developer Center, Juliana Morais, TutorialA recipe
SAP Business Technology Platform: Authorization and Trust Management Service
SAP Community, SekhuteTK, Blog
Why SAP Cloud Identity Matters for SAP Task Center: It’s About Trust and Global User ID
SAP Community, ivelinakiryakov, Blog

Seen working6

ArtifactSignals
Samples6
auth-samplesCAP services and a UI for trying role restrictions with mock users
No license
btp-ui5-show-userinfoUI5 app reading the signed-in user via launchpad and approuter
No license+1
cap-ams-a2aApp-to-app setups between CAP Java and CAP Node.js under AMS and IAS
No license
cap-azure-ad-b2cAuthenticating a CAP service against Azure AD B2C
none
teched2022-XP260TechEd 2022 session on SAP BTP security recommendations
none
teched2023-XP185vHands-on applying SAP BTP security recommendations to a trial account
none

Details

What changed — and what it makes stale1
CAP Java 3.0.1, CAP, Java

Before CAP Java 3.0, XSUAA token validation lived in its own cds-feature-xsuaa module, separate from IAS support. The 3.0 release removed cds-feature-xsuaa and unified XSUAA and IAS behind cds-feature-identity, the module that now provides both.

Makes stale:

Guidance to add cds-feature-xsuaa as a Maven dependency for authentication in a CAP Java project. It was removed in the 3.0 line, mid-2024 — cds-feature-identity is the replacement for XSUAA as well as IAS.

Coverage
statecore and community, CAP
assessed
state in BTP/BAIPcore and community, assessed
state in ABAPcore and community, assessed
state in UI5core only, assessed
relationshipnarrow by design
also inBTP/BAIP, ABAP, UI5
Comparison properties3

These are the questions used to compare what the artifacts do. Values come from their documentation and may apply to a particular ecosystem or runtime. Each recorded value in the comparison opens its statement and sources.

Token with no userPasses the user onCorporate IdP behind it
For your agent
Ref
capability:authentication
JSON
/capabilities/authentication.json
MCP
Connecting an agent