Mobile & screens
Okta mobile app
The Okta mobile app shows the user a set of service cards. Your app can expose a service that appears as a card inside it. This is declared per version — a later version can opt in without touching the original app.
Where to enable it
Partner dashboard → app → version → Integration tab → "Services inside the Okta mobile app" card → toggle it on, then provide the settings.
The three modes — pick one per version
| Mode | What you ship | Where | Rendered as |
|---|---|---|---|
native |
Real Dart (Flutter) | okta_app/native/<entry>/lib/ |
A native UI inside the Okta app |
webview |
Web files | okta_app/webview/ |
A confined WebView |
external |
Nothing — you host it | An HTTPS URL of yours | A WebView on your URL |
native is the only mode that gives you a native UI, and the only one that can
reach device hardware through Okta.* calls. The other two go through the
browser permission model, which the platform does not mediate.
Settings you provide
| Setting | Description |
|---|---|
| mode | native (Dart code — a native UI), webview (web files in your repo) or external (a URL you host). |
| entry | native: a .dart file under okta_app/native/<entry>/lib/. webview: repo-relative path inside okta_app/webview/. external: full HTTPS URL. |
| min_contract | native only. The lowest host contract your code needs — per account type, under each row's entry in the Okta-app account-types list; a type without one inherits the block default, and the exported mobile.minContract mirrors the primary type. |
| allowed origins | External only: HTTPS origins the page may be loaded from. |
| required scope | Optional. The card is shown only if the user's active role holds this scope (from the scopes granted to the version). Empty = shown to any role that can open the app. |
| pass role claim | Optional, external only. Adds the role claim inside the signed JWT. No database access either way. |
File structure (webview mode)
Put everything rendered in the mobile app inside a okta_app/webview/ folder at
the root of your app repo:
mobile/
├── README.md
├── manifest.json ← optional metadata for the mobile surface
├── screens/ ← entry files rendered in the WebView
│ └── dashboard.blade.php
└── assets/ ← css / js / images for those screens
Example entry: okta_app/webview/screens/dashboard.blade.php.
Policy (enforced)
Mobile services are confined to the dedicated okta_app/webview/ namespace:
- The
webviewentrymust be a repo-relative path insideokta_app/webview/only — nohttp(s)://scheme, no..traversal. Anything else is rejected at save/review time. - Mobile screens may not link, navigate, or redirect to any
platform/tenant page outside the
okta_app/webview/namespace. - This is also enforced at runtime by okta-web's
app.webviewmiddleware (the mobile surface is fenced to the/appnamespace). - In
externalmode you ship nothing here — you host the page, and isolation comes fromallowed origins+ zero data binding.