Overview
π± GuardianKey Mobile SDKβ
The GuardianKey Mobile SDK brings Auth Security XE (checkaccessxe) to native
mobile apps. It is a Kotlin Multiplatform (KMP) library that you call at the
login step of your own Android/iOS application β exactly the way the reference
demo app does. For each login attempt the SDK collects device and behavioral
information, builds a gkas_solution token, and your backend forwards it to
GuardianKey, which returns a risk decision (ALLOW / BLOCK).
It is the mobile equivalent of the web collector: where the browser runs a JavaScript snippet on the login form, the SDK runs the same logic natively.
π The contents and format of
gkas_solutionare intentionally not documented β treat it as an opaque token. You never need to read, build or parse it: the SDK produces it, your app forwards it to your backend, and your backend forwards it unchanged tocheckaccessxe. This page and the integration guides cover everything required to integrate; the internal payload is a black box by design.
π§© What you integrateβ
| Piece | Who provides it | Role |
|---|---|---|
Mobile SDK (io.guardiankey.gkas) | GuardianKey (this SDK) | Collects signals, builds the gkas_solution token, talks to your backend. |
| Your app (Android/iOS) | You | Calls the SDK during login and reacts to the decision. |
| Your backend (REST) | You | Exposes GET /config and POST /login; calls checkaccessxe serverβside with your GuardianKey credentials. |
π GuardianKey credentials (key/iv/agentId/β¦) live only on your backend. The mobile app never holds them. The app only talks to your backend.
π Login flowβ
The SDK exposes three calls. A login screen drives them in order:
βββββββββββββββ 1. fetchConfig() ββββββββββββββββ
β Your app β βββββββββββββββββββββββΆ β Your backend β GET /config
β (login UI) β βββββββββββββββββββββββ β (REST) β β salt, once, time, policy, url
βββββββββββββββ salt/once/time/policy ββββββββββββββββ
β
β 2. buildSolution(config, username)
β collect signals + resolve identity β gkas_solution (opaque token)
βΌ
βββββββββββββββ 3. login(LoginRequest) ββββββββββββββββ checkaccessxe ββββββββββββββ
β Your app β βββββββββββββββββββββββΆ β Your backend β βββββββββββββββββΆ β GuardianKeyβ
β β βββββββββββββββββββββββ β β βββββββββββββββββ β XE β
βββββββββββββββ decision: ALLOW|BLOCK ββββββββββββββββ risk decision ββββββββββββββ
β
ββ ALLOW β enter the app (Home)
ββ BLOCK β stay on login, show the block message
fetchConfig()βGET /configreturnssalt,once(oneβtime nonce),time,urland apolicythat tells the SDK which identity tier to use.buildSolution(config, username)β collects signals, resolves the device identity, and returns thegkas_solution(an opaque token).usernameis the field value bound to this attempt.login(LoginRequest(...))βPOST /loginwith the credentials and thegkas_solution. The backend validates/consumes theonce, callscheckaccessxe, and returns a normalizeddecision.
πͺͺ Device identity tiersβ
The backend's policy.tiers selects, in cascade with fallback, how the device
identifies itself for the attempt. The only thing the integrator needs to know is
the userβfacing behavior:
| Tier | User experience |
|---|---|
biometric | Shows a biometric prompt (fingerprint/face) during login. |
software | Silent β no prompt. |
uuid | Silent fallback when stronger tiers are unavailable. |
On iOS the same tiers map to the platform's native mechanisms (currently provided as compilable stubs β see the iOS page).
π¦ Collected signalsβ
During buildSolution() the SDK gathers a range of device and behavioral
information (such as biometric/identity signals, touch behavior, among others)
and packs it into the opaque gkas_solution token.
What matters for integration:
- Bestβeffort, never blocks login. Every collector tolerates missing permissions or unavailable hardware β if something can't be read, it is simply omitted and login still proceeds.
- No typed content is captured (e.g. behavioral touch signals record timing, not what the user types).
- Permissions are optional. Granting more runtime permissions yields richer signals, but denying them never breaks the flow. See the Android guide for the permission list.
βοΈ Next stepsβ
- Android integration β stepβbyβstep.
- iOS integration β current state and contract.
- API reference β public API and backend contract.