Zum Hauptinhalt springen

Tokens

azuma doa issues three types of tokens depending on the authentication flow:

  • Access Token: Used to authenticate API requests.
  • Identity Token: Contains user identity information (specific to OpenID Connect flows).
  • Refresh Token: Used to obtain new access tokens without re-authenticating the user.

Two restricted variants of the Access Token also exist, for handing to a downstream integration — see Integration Scopes.

For more details, refer to the OAuth 2.0 Specification.

Device Binding

In the Device Binding flow azuma doa issues only Access Token and Refresh Token.

Access Token format

{
"aud": [
"803ad030-10a2-417a-bd19-7ad7ccc2dc9d"
],
"client_id": "803ad030-10a2-417a-bd19-7ad7ccc2dc9d",
"exp": 1751195134,
"ext": {
"authorized_scopes": [],
"kind": "initial",
"licenses": [],
"linked_authentications": [],
"permissions_app": [],
"security_mode": "device-binding",
"tenant_id": "d23e6db7-683b-4411-9ede-8ec040816de7"
},
"iat": 1751191533,
"iss": "https://oidc.pie.azuma-health.tech",
"jti": "d220c0e7-9b85-456f-b503-1d04505a6f6f",
"nbf": 1751191533,
"scp": [
"offline_access",
"permissions_app",
"licenses"
],
"sub": "f09af826-8b73-46d6-80c5-57646e4d1384"
}
ClaimDescription
audContains your application-ID
client_idYour application-ID, that the device binding tokens were requested for.
ext: authorized_scopesThe scopes the client was authorized for. This is always empty in the device binding flow.
ext: kindinitial for the initially returned token after user authentication. refresh for a token that was retrieved via Refresh Token.
ext: licensesContains user licenses if defined and assigned.
ext: linked_authenticationsContains the linked authentications (see below for format).
ext: permissions_appContains user permissions if defined and assigned.
ext: security_modeAlways set to device-binding for the device binding flow.
ext: tenant_idThe tenant ID.
scpScopes.
exp, iat, iss, jti, nbfDefault claims

Linked Authentications

{
"provider": "mimoto",
"sub": "https://gsi.dev.gematik.solutions-*id*-https://mimoto-test.pie.azuma-health.tech/oidcf/azuma-demo-tu"
}

Currently, only mimoto is supported.

Authorization Code

Access Token Format

The format for access tokens in the Authorization Code flow will be documented in a future update. Stay tuned for more details.

Client Credentials

Access Token format

{
"client_id": "159c733f-f1e9-4e9c-96c7-248486408b40",
"exp": 1754066469,
"ext": {
"authorized_scopes": [
"tenant_admin"
],
"tenant_id": "71c470c6-f6a1-4e59-b105-d8587c364f47"
},
"iat": 1754062869,
"iss": "https://oidc.pie.azuma-health.tech",
"jti": "388fbeaf-5691-44d1-b2b7-00e7cf3a3cad",
"nbf": 1754062869,
"scp": [
"71c470c6-f6a1-4e59-b105-d8587c364f47_admin"
],
"sub": "159c733f-f1e9-4e9c-96c7-248486408b40"
}
ClaimDescription
subYour client-ID
ext: authorized_scopesThe scopes the client was authorized for (this is an extension added for the admin-scope that was requested
ext: tenant_idThe tenant ID the client was authorized for
scpClient scopes
exp, iat, iss, jti, nbfDefault claims

Integration Scopes

A token minted for an Integration Scope is deliberately minimal. It is intended to be handed to a downstream integration, so it proves the tenant and the user — and nothing else about them.

Access Token format

{
"aud": [
"803ad030-10a2-417a-bd19-7ad7ccc2dc9d-azmscope-partner-acme"
],
"client_id": "803ad030-10a2-417a-bd19-7ad7ccc2dc9d",
"exp": 1751192193,
"ext": {
"tenant_id": "d23e6db7-683b-4411-9ede-8ec040816de7"
},
"iat": 1751191533,
"iss": "https://oidc.pie.azuma-health.tech",
"jti": "6b1e2f70-3d55-4b58-9a2c-7c2c6f5f4a11",
"nbf": 1751191533,
"scp": [
"partner-acme"
],
"sub": "f09af826-8b73-46d6-80c5-57646e4d1384"
}
ClaimDescription
audExactly one audience, {applicationId}-azmscope-{scope}. A token minted for one integration cannot be replayed against another.
client_idYour application-ID.
ext: tenant_idThe tenant ID — the only ext claim this token carries.
scpThe single configured scope the token was minted for.
subThe user's account ID.
exp, iat, iss, jti, nbfDefault claims

What is absent is the point. There is no security_mode, no kind, no licenses, no permissions_app, no linked_authentications, and not even authorized_scopes. The token is never refreshable, and every ordinary azuma doa endpoint rejects it — only the introspection endpoint accepts it.

Health-ID ePA Integration

The reserved health-id-epa-integration scope mints the same minimal shape plus the user's KVNR binding. See Health-ID ePA Integration.

Access Token format

{
"aud": [
"803ad030-10a2-417a-bd19-7ad7ccc2dc9d-health-id-epa-integration"
],
"client_id": "803ad030-10a2-417a-bd19-7ad7ccc2dc9d",
"exp": 1751191833,
"ext": {
"authorized_scopes": [],
"kvnr_hmac": "3sHwqS1Ob4ocO113n_CiTGvY4PGjxbfZ4fCixLbY4PE",
"tenant_id": "d23e6db7-683b-4411-9ede-8ec040816de7"
},
"iat": 1751191533,
"iss": "https://oidc.pie.azuma-health.tech",
"jti": "a3f9c1d2-5e47-4b90-8c6a-2d1f7b3e5c88",
"nbf": 1751191533,
"scp": [
"health-id-epa-integration"
],
"sub": "f09af826-8b73-46d6-80c5-57646e4d1384"
}
ClaimDescription
aud{applicationId}-health-id-epa-integration. Note there is no azmscope marker — the ePA family is distinguishable by audience alone.
ext: authorized_scopesAlways empty. Present on this token family only; a configured-scope token omits it entirely.
ext: kvnr_hmacA keyed hash of the user's Krankenversichertennummer, established through their Health-ID. The raw number is never in the token — it is an HMAC-SHA256 digest in unpadded Base64URL.
ext: tenant_idThe tenant ID.
scpAlways health-id-epa-integration.
exp, iat, iss, jti, nbfDefault claims. The lifetime is five minutes, and never longer than the token it was exchanged from.