All skills
secondsky avatar

/sap-btp-job-scheduling

@620a19a
by Eddiesecondsky/sap-skills456 stars
120

This skill provides comprehensive guidance for SAP BTP Job Scheduling Service development, configuration, and operations. It should be used when creating, managing, or troubleshooting scheduled jobs on SAP Business Technology Platform. The skill covers service setup, REST API usage, schedule types and formats, OAuth 2.0 authentication, multitenancy, Cloud Foundry tasks, Kyma runtime integration, and monitoring with SAP Cloud ALM and Alert Notification Service. Keywords: SAP BTP, Job Scheduling, jobscheduler, cron, schedule, recurring jobs, one-time jobs, Cloud Foundry tasks, CF tasks, Kyma, OAuth 2.0, XSUAA, @sap/jobs-client, REST API, asynchronous jobs, action endpoint, run logs, SAP Cloud ALM, Alert Notification Service, multitenancy, tenant-aware, BC-CP-CF-JBS

Use this Skill: https://skilld.dev/gh/secondsky/sap-skills/sap-btp-job-scheduling

This session only. Nothing lands on disk.

referencessecurity.md

≈2.8k tokens on demand. Your agent reads this file only when SKILL.md points to it.

SAP BTP Job Scheduling Service - Security Guide

Source: https://github.com/SAP-docs/sap-btp-job-scheduling-service/tree/main/docs/50---Security Last Updated: 2025-11-22


Table of Contents

  1. Security Overview
  2. OAuth 2.0 Authentication
  3. XSUAA Configuration
  4. Scope Management
  5. Credential Rotation
  6. Data Protection
  7. Best Practices

Security Overview

Authentication Methods

Service Plan Authentication Protocol
lite HTTP Basic Auth HTTPS
standard OAuth 2.0 HTTPS

Security Architecture

┌─────────────────┐    OAuth Token    ┌──────────────────┐
│  Job Scheduling │ ───────────────── │   Your App       │
│     Service     │                   │ (Action Endpoint)│
└────────┬────────┘                   └────────┬─────────┘
         │                                     │
         │ Token Request                       │ Token Validation
         │                                     │
         └──────────────┬──────────────────────┘
                        │
               ┌────────┴────────┐
               │      XSUAA      │
               │ (Token Issuer)  │
               └─────────────────┘

Key Security Features

  • OAuth 2.0 protected communication for API access
  • OAuth 2.0 protected job action endpoint invocation
  • Token-based authentication with configurable scopes
  • Support for X.509 certificate-based authentication
  • Credential rotation via binding/unbinding

OAuth 2.0 Authentication

Token Flow for Job Execution

  1. Job Scheduling requests token from XSUAA using service credentials
  2. XSUAA validates credentials and returns access token with granted scopes
  3. Job Scheduling calls action endpoint with Bearer token in Authorization header
  4. Application validates token using bound XSUAA instance
  5. Application processes request if token is valid

Token Acquisition

Client Credentials Flow (clientsecret):

curl -X POST "https://<uaa-url>/oauth/token" \
  -H "Authorization: Basic $(echo -n '<clientid>:<clientsecret>' | base64)" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials"

Certificate-Based Authentication:

curl -X POST "https://<certurl>/oauth/token" \
  --cert /path/to/certificate.pem \
  --key /path/to/key.pem \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=<clientid>"

Token Response

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 43199,
  "scope": "uaa.resource my-app.JOBSCHEDULER",
  "jti": "abc123..."
}

Token Caching

  • Tokens cached for up to 12 hours
  • Scope changes may take time to propagate
  • If scope names change, cached tokens may cause errors

XSUAA Configuration

xs-security.json Structure

{
  "xsappname": "<application-name>",
  "tenant-mode": "dedicated",
  "scopes": [
    {
      "name": "$XSAPPNAME.JOBSCHEDULER",
      "description": "Job Scheduler Scope",
      "grant-as-authority-to-apps": [
        "$XSSERVICENAME(<jobscheduler-instance-name>)"
      ]
    }
  ],
  "authorities": [
    "$XSAPPNAME.JOBSCHEDULER"
  ]
}

Configuration Elements

Element Purpose
xsappname Unique application identifier
tenant-mode Multitenancy mode (dedicated/shared)
scopes OAuth scopes definition
grant-as-authority-to-apps Grant scope to other services
authorities Scopes the app can request

Variable Substitution

Variable Resolves To
$XSAPPNAME Value of xsappname field
$XSSERVICENAME(name) Service instance identifier

Create/Update XSUAA Instance

Create:

cf create-service xsuaa application my-xsuaa -c xs-security.json

Update:

cf update-service my-xsuaa -c xs-security.json

Bind:

cf bind-service my-app my-xsuaa
cf restage my-app

Scope Management

Granting Scopes to Job Scheduling

The grant-as-authority-to-apps property enables Job Scheduling to obtain your application's scopes:

{
  "scopes": [{
    "name": "$XSAPPNAME.JOBSCHEDULER",
    "description": "Job Scheduler Scope",
    "grant-as-authority-to-apps": [
      "$XSSERVICENAME(my-jobscheduler)"
    ]
  }]
}

Multiple Scopes

Grant multiple scopes if your application requires different permissions:

{
  "scopes": [
    {
      "name": "$XSAPPNAME.JobRead",
      "description": "Read job data",
      "grant-as-authority-to-apps": ["$XSSERVICENAME(my-jobscheduler)"]
    },
    {
      "name": "$XSAPPNAME.JobWrite",
      "description": "Write job data",
      "grant-as-authority-to-apps": ["$XSSERVICENAME(my-jobscheduler)"]
    }
  ]
}

Verifying Scope Grants

Get Token Manually:

# Get token using Job Scheduling credentials
curl -X POST "<job-scheduler-uaa-url>/oauth/token" \
  -H "Authorization: Basic $(echo -n '<clientid>:<clientsecret>' | base64)" \
  -d "grant_type=client_credentials"

Decode Token (jwt.io or similar):

Check the scope claim includes your granted scopes.

Troubleshooting Scope Issues

Issue Cause Solution
Scope not in token Not granted Update xs-security.json
401 on action endpoint Token invalid Verify XSUAA binding
Scope grant delayed Token caching Wait up to 12 hours

Credential Rotation

Process Overview

Credentials are binding-level, meaning new credentials are created each time you bind the service.

Rotation Steps

1. Unbind Service:

cf unbind-service my-app my-jobscheduler

2. Rebind Service:

cf bind-service my-app my-jobscheduler

3. Restage Application:

cf restage my-app

Key Points

Aspect Behavior
Old credentials Invalidated immediately on unbind
New credentials Generated automatically on rebind
Token requests Will fail with old credentials after unbind
Downtime Brief during restage

X.509 Certificate Rotation

For certificate-based bindings:

# Unbind
cf unbind-service my-app my-jobscheduler

# Rebind with new certificate parameters
cf bind-service my-app my-jobscheduler -c parameters.json

# Restage
cf restage my-app

Certificate parameters.json:

{
  "credential-type": "x509",
  "x509": {
    "key-length": 2048,
    "validity": 30,
    "validity-type": "DAYS"
  }
}

Zero-Downtime Rotation (Advanced)

For production systems requiring zero downtime:

  1. Create second service binding (if supported)
  2. Update application to use new binding
  3. Remove old binding

Data Protection

Personal Data Handling

The Job Scheduling service does not provide technical capabilities to support collection, processing, and storage of personal data.

Fields NOT Intended for Personal Data

Field Risk
Job names Visible in logs and dashboard
Schedule descriptions Stored in service database
Response message text Stored in run logs
Custom data payloads Passed to action endpoints

Compliance Considerations

  • Data protection requires case-by-case evaluation
  • Organizations must assess specific legal requirements
  • SAP does not provide legal advice
  • System landscape configuration affects compliance

Run Log Retention

  • Run logs automatically deleted after 15 days
  • Download logs before deletion if needed for compliance
  • Consider data classification before including sensitive info

Best Practices

HTTPS Requirements

  • Always use HTTPS for action endpoints in production
  • HTTP allowed only for development/testing
  • Dashboard enforces HTTPS requirement for job creation

Scope Naming

  • Use descriptive, consistent scope names
  • Include purpose in scope descriptions
  • Follow naming conventions: $XSAPPNAME.<PurposeDescription>

Credential Management

Practice Recommendation
Storage Never hardcode credentials
Rotation Rotate quarterly minimum
X.509 Prefer certificates over secrets
Validity Set appropriate certificate validity

Token Validation

Implement proper token validation in action endpoints:

const xsenv = require('@sap/xsenv');
const passport = require('passport');
const { JWTStrategy } = require('@sap/xssec');

// Configure passport with XSUAA
const services = xsenv.getServices({ uaa: { tag: 'xsuaa' } });
passport.use(new JWTStrategy(services.uaa));

// Protect endpoint
app.post('/api/process',
  passport.authenticate('JWT', { session: false }),
  (req, res) => {
    // Validate specific scope
    if (!req.authInfo.checkScope('$XSAPPNAME.JOBSCHEDULER')) {
      return res.status(403).send('Forbidden');
    }
    // Process request
  }
);

Required packages:

npm install @sap/xsenv @sap/xssec passport

Cloud Foundry Tasks

  • CF tasks use Cloud Foundry UAA (CFUAA), not XSUAA
  • XSUAA binding not required for CF task creation
  • Space Developer role required for task management

Security Checklist

Initial Setup

  • XSUAA instance created with xs-security.json
  • Scopes defined with appropriate descriptions
  • grant-as-authority-to-apps configured for Job Scheduling
  • XSUAA bound to application before Job Scheduling
  • Application restaged after bindings

Action Endpoint

  • HTTPS enabled (required for production)
  • Token validation implemented
  • Scope verification in endpoint handler
  • Error handling for auth failures

Ongoing Operations

  • Credential rotation scheduled (quarterly)
  • Token caching behavior understood
  • Run log retention policy defined
  • Personal data handling documented

External References

SAP Documentation

Source Files

  • security-9fb8213.md
  • secure-access-745ca50.md
  • define-and-grant-scopes-to-sap-job-scheduling-service-08933d3.md
  • credential-rotation-ed3bf28.md

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    This skill provides comprehensive guidance, templates, and reference material for managing the SAP BTP Job Scheduling Service. It covers API usage, security configuration (OAuth 2.0/XSUAA), and integration with SAP Cloud ALM and Alert Notification services using official SAP tools.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    7/13 files flagged

  • ZeroLeaks5mo

    2 findings · Score: 80/100

Signed by skilld at 620a19a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 weeks ago.

Activeupdated 2 months ago
Other metadata
metadata
{
  "maintainer": "Eduard Jiglau",
  "maintainer_email": "hello@sap-ai-skills.com",
  "website": "https://sap-ai-skills.com",
  "version": "2.4.1",
  "last_verified": "2025-11-27"
}

README badge

README badge for secondsky/sap-skills/sap-btp-job-scheduling