Fusion OAuth Authentication logo

Fusion OAuth Authentication

Organization
oracle
Fusion OAuth Authentication

Provides the fusion oauth authentication core capability for Oracle Fusion Cloud implementation workflows.

Overview

Publisheroracle
RepositoryFusion-Setup-Configuration-Registry
Skill nameFusion OAuth Authentication
Stars
112
Forks
26
Bundled files
6
LicenseUPL-1.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by oracle on GitHub. Read the source before you install it.

Installation

Install the Fusion OAuth Authentication AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/oracle/Fusion-Setup-Configuration-Registry/tree/main/core/auth/fusion-oauth-authentication
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/oracle/Fusion-Setup-Configuration-Registry.git /tmp/Fusion-Setup-Configuration-Registry
mkdir -p .claude/skills
cp -r /tmp/Fusion-Setup-Configuration-Registry/core/auth/fusion-oauth-authentication .claude/skills/oracle-fusion-oauth-authentication
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Fusion OAuth Authentication in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Fusion OAuth Authentication on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Fusion OAuth Authentication is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Fusion OAuth Authentication

Use this core skill whenever a project workflow needs Oracle Fusion Cloud OAuth authentication or when the user asks for Fusion login, authentication, access token retrieval, token-cache refresh, OAuth login, or equivalent Oracle Fusion Cloud authentication.

Purpose

For getting-started questions, IAM client application prerequisites, or help understanding core/auth/fusionEnv.properties values, use FSCR Onboarding for advisory guidance. Return here when the active workflow selects authentication execution.

Provide the shared OAuth2 authorization-code workflow for Oracle Fusion Cloud implementation skills. Other router, shared, and pillar skills should use this core capability instead of duplicating login, token refresh, token cache, or Fusion REST authentication logic.

Trigger Phrases

Use this skill when a user or downstream skill says:

  • fusion login
  • authenticate
  • get access token
  • refresh token
  • OAuth login
  • Fusion OAuth
  • Fusion authentication

Project Scripts

Run from the repository root. Use the scripts bundled with this skill:

  • core/auth/fusion-oauth-authentication/scripts/fusion_login.py
  • core/auth/fusion-oauth-authentication/scripts/fusion_auth.py

All login and REST CLI defaults use the shared external profile cache:

bash
python3 core/auth/fusion-oauth-authentication/scripts/fusion_login.py --token-cache auto

Select a service explicitly to authenticate its configured scope and save its separate reusable cache:

bash
python3 core/auth/fusion-oauth-authentication/scripts/fusion_login.py --service fusion-common
python3 core/auth/fusion-oauth-authentication/scripts/fusion_login.py --service boss
ServiceBase URL propertyScope propertyDefault service file cache
standardrestBaseUrlscopeManaged profile cache
bossrestBaseUrlboss_scopeManaged profile cache
fusion-commonrestBaseUrlfusion_common_scopeManaged profile cache
field-servicefs_restBaseUrlfs_scopeManaged profile cache
cdpcdp_restBaseUrlcdp_scopeManaged profile cache

Each profile uses ~/.fusionaim/<profile-fingerprint>_token.json; the fingerprint binds the approved issuer/endpoints, client, target and scope. auto means this managed location, never a literal file named auto. Custom paths inside the checkout are rejected. External custom paths need a user-owned mode-0700 parent; cache reads/writes reject symlinks, hardlinks and unsafe permissions. Writes use a mode-0600 temporary file and atomic replacement.

Login and REST clients share the service configuration in fusion_auth.py. --token-cache overrides the selected default. Missing or blank service scopes block authentication; never substitute scope or boss_scope for fusion_common_scope. Use the exact scope registered with the configured OAuth application, without deriving a scope from the environment label. Local scope selection does not grant privileges at the identity provider or Fusion API.

The default Fusion environment properties file is:

text
core/auth/fusionEnv.properties

This file provides:

  • environment
  • restBaseUrl
  • fs_restBaseUrl
  • fs_scope
  • fusion_common_scope
  • cdp_restBaseUrl
  • cdp_scope
  • clientId
  • scope
  • boss_scope
  • redirectUrl

The additional service properties are read when the login CLI or a consuming REST client selects the corresponding service. Standard login uses restBaseUrl and scope.

OAuth authorizeUrl and tokenUrl are derived from the selected environment's issuer, authorize_path, and token_path in ~/.fusionaim/oauth-trust.json. Do not add these URLs to the properties file. Matching legacy URL settings remain compatible; conflicting values are rejected before authentication.

Do not print access tokens, client secrets, or .fusionaim_token.json contents.

Inputs

  • fusion_environment_context
  • request_payload
  • execution_options

Script-level inputs:

  • --service: standard (default), boss, fusion-common, field-service, or cdp; selects the configured scope, base URL, and default cache

  • --properties: optional override path for the Fusion environment properties file; defaults to core/auth/fusionEnv.properties

  • --auth-code: optional OAuth2 authorization code

  • --code-verifier: required with --auth-code when pkce=true

  • --redirect-url: optional redirect URI override

  • --callback-timeout: seconds to wait for a loopback callback

  • --token-cache: path to the file token cache

  • --no-open-browser: print the authorization URL without opening a browser

Independent OAuth Trust Enrollment

Login requires a trust policy enrolled separately from caller-selectable properties. The user supplies the Fusion URL, environment name and OAuth client ID; the supplied Fusion origin's HTTPS login redirects establish the IdP origin for enrollment. Do not derive the trust source from an arbitrary properties file's OAuth URLs. The fixed trust source is ~/.fusionaim/oauth-trust.json (mode 0600 in a mode-0700 directory); properties and environment variables cannot select another policy. When the file is missing, use this exact welcome prompt in both interactive CLI and agent-assisted login:

FSCR needs to enroll the trusted Fusion Environment Please enter the Fusion URL and a name for the environment. Also provide the Oauth Client ID so that an approved environments trust file can be created

Collect Fusion URL, environment name, and Oauth Client ID together. Do not ask for the issuer or append a client-secret request to this welcome prompt. The name and client ID must match the selected configuration for login to continue.

After validating the inputs, the declared discovery step performs unauthenticated GET requests from the supplied Fusion HTTPS origin's root. It follows at most eight same-origin redirects within 30 seconds and derives the issuer from the redirect to /oauth2/v1/authorize on the identity origin, without requesting that off-origin URL. It sends no bearer token, Basic header, client secret or cookies, does not submit forms or execute scripts, and never stores redirect query parameters. HTTP downgrade, credential URLs, ambiguous destinations, loops and failed discovery stop enrollment. For environment validation, the same read-only discovery helper may inspect the already selected Fusion environment; validation alone must not create/replace trust.

The resulting policy pins the Fusion origin, issuer, client ID and exact OAuth paths; subsequent login derives both OAuth endpoints from it. No OpenID discovery document is used. Standard endpoint paths are documented by Oracle. The directory is mode 0700 and the policy mode 0600. Blank, cancelled, invalid or mismatched inputs do not create a policy, and existing invalid files are not replaced.

For agent-run login without interactive stdin, show the welcome prompt, collect the three values, run the command below using those answers, then resume the requested login and scope. Unattended callers receive setup guidance instead of waiting for input.

bash
python3 core/auth/fusion-oauth-authentication/scripts/fusion_auth_setup.py trust \
  --fusion-url https://APPROVED_FUSION_HOST --environment ENVIRONMENT_NAME \
  --client-id APPROVED_CLIENT_ID

The pinned paths are /oauth2/v1/authorize and /oauth2/v1/token. Environments with other login mechanisms or approved endpoint paths can use explicit --issuer instead of --fusion-url, together with --authorize-path and --token-path. Existing enrollment changes require --replace. This local enrollment does not authorize live Fusion operations or bypass their routed workflow prerequisites.

PKCE Public-Client Option

PKCE/public-client mode is the default (pkce=true). clientId remains required; plaintext clientSecret properties are never used for authentication. The login script creates a one-time S256 verifier and challenge for interactive browser logins; it never stores or prints the verifier. When supplying --auth-code, also supply its matching --code-verifier.

An existing confidential application may explicitly set pkce=false. On macOS and Windows, after independent trust enrollment, store its secret through the hidden prompt:

bash
python3 core/auth/fusion-oauth-authentication/scripts/fusion_auth_setup.py store-client-secret \
  --properties core/auth/fusionEnv.properties

Remove real clientSecret values from the properties file after successful storage; never put secrets in command arguments. The helper validates pins before prompting or accessing private credential storage, and the exchange revalidates before forming Basic. For a legacy properties secret on macOS or Windows, add --migrate-properties-secret to move it into private storage after pin validation, verify storage, and clear only that property value.

On Linux, store-client-secret can enroll an explicitly supplied secret in ~/.fusionaim/oauth-client-secrets/<account>.json. This is a hidden, user-owned mode-0600 file under mode-0700 directories, bound to the approved environment, issuer, and client. It is plaintext at rest, so use it only when that local storage is acceptable for the VM. The helper prompts without echo and verifies the stored value. --migrate-properties-secret also works on Linux after trust validation and clears the properties value after successful storage.

For a VM with a cloud secret manager, prefer its mounted secret instead. When either FSCR_OAUTH_CLIENT_SECRET_FILE or FSCR_OAUTH_CLIENT_SECRET_ACCOUNT is set, FSCR requires the complete cloud mount configuration and does not fall back to the local file.

On a headless Linux VM, use the VM's cloud secret manager to mount the approved client secret as a private, single-line UTF-8 file outside the checkout. The runner supplies only its absolute path and the account binding through FSCR_OAUTH_CLIENT_SECRET_FILE and FSCR_OAUTH_CLIENT_SECRET_ACCOUNT. FSCR reads the secret at exchange time; it does not copy it into its own store. The file must be a regular single-link file owned by root or the runner, with no group or other permissions (for example mode 0400 or 0600). Symlinks are rejected. The cloud secret manager and VM identity are configured outside FSCR. Do not place the secret value in an environment variable, properties file, command argument, repository file, log, or project artifact.

After enrolling trust, get the non-secret account binding for the selected configuration and configure the VM's mount and environment:

bash
python3 core/auth/fusion-oauth-authentication/scripts/fusion_auth_setup.py \
  client-secret-account --properties core/auth/fusionEnv.properties
# Set FSCR_OAUTH_CLIENT_SECRET_ACCOUNT to that output.
# Set FSCR_OAUTH_CLIENT_SECRET_FILE to the absolute mounted-file path.
python3 core/auth/fusion-oauth-authentication/scripts/fusion_auth_setup.py \
  check-client-secret --properties core/auth/fusionEnv.properties

A Linux runner using the cloud mount replaces store-client-secret with this preflight. Keep pkce=false and the existing login/token-cache flow. A different environment, issuer, or client ID produces a different account binding and fails closed until the runner's secret configuration is updated.

Outputs

  • execution_result
  • diagnostics
  • audit_summary

Script-level outputs:

  • A refreshed access token cache stored in the requested cache path, macOS Keychain, or the default per-profile file cache.
  • Console status indicating login completion and cache location, without exposing token values.

Callback Behavior

If redirectUrl is a loopback URL such as:

text
http://127.0.0.1:8765/oauth/callback

the login script starts a temporary local listener before opening the browser and auto-captures the authorization code.

If redirectUrl is not loopback, the script cannot capture the code automatically. Ask the user to paste only the redirected code= query parameter, then feed it to the waiting login process.

Use by Other Skills

Other project skills should reference this skill for login and token refresh. Their REST scripts may import fusion_auth.py from this skill's scripts/ folder and accept:

  • --token-cache auto
  • --auth-code
  • --redirect-url
  • --force-login
  • --access-token

If a REST script reports that the cached token was rejected, refresh authentication using this skill, then retry the original operation.

Security Rules

  1. Never print access tokens, refresh tokens, client secrets, or full token-cache contents.
  2. Use the managed cache outside the checkout; never store a token under project/ or pass a historical repository-local cache name.
  3. Keep file token caches user-readable and user-writable only.
  4. Treat core/auth/fusionEnv.properties as environment-specific configuration and avoid copying its values into generated artifacts.

Error Handling

Preflight the selected environment, enrolled trust policy, client ID, redirect URI, PKCE mode, and private cache path before login. For pkce=false, validate the secret account binding and private storage before the token exchange. Missing or mismatched configuration is an input-validation or authorization failure; stop without trying another environment or secret source.

Treat an unavailable identity provider or cloud-mounted secret as a transport or environment failure. A rejected authorization code or token response is an OAuth service failure. Report the stage, selected environment, failure class, and a safe next action. Never print or persist authorization codes, access tokens, client secrets, token-cache contents, or secret-bearing responses. Do not retry a token exchange automatically after an ambiguous failure; start a fresh authorization flow when needed.

Implementation Notes

This file defines the repository contract for the OAuth capability. The bundled scripts provide the current implementation. Implementations must record request parameters, environment identity, side effects, and any authentication diagnostic information needed for auditability without exposing secrets.

Final Response

For login-only requests, report whether login completed and where the cache was saved:

text
Fusion login complete. The refreshed token was saved in ~/.fusionaim/<profile-fingerprint>_token.json.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Fusion OAuth Authentication AI skill do?

Provides the fusion oauth authentication core capability for Oracle Fusion Cloud implementation workflows.

Why use Fusion OAuth Authentication on TypingMind?

Because you install it once and use it with any model. Fusion OAuth Authentication is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Fusion OAuth Authentication in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/oracle/Fusion-Setup-Configuration-Registry/tree/main/core/auth/fusion-oauth-authentication. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Fusion OAuth Authentication?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Fusion OAuth Authentication?

As many as you like. As long as a model supports skills, you can use Fusion OAuth Authentication with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Fusion OAuth Authentication AI skill free?

Yes. It is published on GitHub by oracle under the UPL-1.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇