Skip to content
Last updated

Aritma IAM supports configuring external identity providers (IdPs) so your users can log in using their existing corporate credentials. Notably we generally support all OIDC SSO providers through "Custom" providers, other SSO mechanisms like SAML are not supported. Additionally we provide templates for more common providers like AzureAd and Signicat.

Supported provider types

TypeDescription
Custom (Oidc)Any OpenID Connect-compliant identity provider
AzureAdMicrosoft Entra ID (Azure Active Directory)
GoogleGoogle OAuth
SignicatSignicat OAuth

How SSO works

  1. You register an identity provider in Aritma IAM with a unique scheme name
  2. The provider appears as a login option on the Aritma ID login page
  3. When a user logs in via the SSO provider, Aritma ID authenticates them through the external IdP
  4. Optionally, users can be auto-provisioned - a new Aritma subject is created the first time they log in

Configuration

Each provider type requires a different set of properties. The full JSON schema for each provider type is documented in the API Reference.

Common provider properties

All provider types share these base configuration fields:

FieldDescription
schemeA unique identifier for this provider (used in login URLs)
displayNameThe name shown on the login button
clientIdThe OAuth 2.0 client ID registered with the identity provider
clientSecretThe OAuth 2.0 client secret. Leave null for public clients using PKCE
loginEnabledWhether users can log in using this provider
visibleWhether this provider appears as a button on the login page
autoProvisioningEnabledIf true, users are automatically created in Aritma on first login
delegationEnabledIf true, tokens from this IdP can be used to call Aritma APIs directly

Azure AD / Microsoft Entra ID

Register an app in your Azure portal and obtain a client ID and secret. Then create the provider:

curl -i -X POST \
  https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/azuread \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "usePkce": true,
      "authority": "https://login.microsoftonline.com/{TenantId}/v2.0",
      "responseType": "code",
      "scope": "openid profile email"
    }
  }'
FieldDescription
authorityYour Azure AD tenant endpoint, e.g. https://login.microsoftonline.com/{tenant-id}/v2.0

OpenID Connect (Custom)

Use this for any OIDC-compliant identity provider not covered by the templates above.

curl -i -X POST \
  https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "verifyEnabled": false,
      "responseType": "code",
      "nameClaimType": "name",
      "emailClaimType": "email",
      "phoneNumberClaimType": "phone",
      "subjectClaimType": "sub",
      "authority": "https://your-idp.example.com",
      "scope": "openid profile email",
      "getClaimsFromUserInfoEndpoint": false,
      "usePkce": false
    }
  }'

The authority must point to an OpenID Connect server. Aritma automatically fetches the .well-known/openid-configuration from this URL.

FieldDescription
authorityThe OIDC authority URL of the provider
scopeThe OAuth 2.0 scopes to request (space-separated), e.g. openid profile email
responseTypeThe OAuth 2.0 response type: code, id_token, token, or none
usePkceWhether to use PKCE for the authorization code flow
getClaimsFromUserInfoEndpointIf true, fetches additional claims from the userinfo endpoint after authentication
nameClaimTypeThe claim type used to extract the user's name, e.g. name
emailClaimTypeThe claim type used to extract the user's email, e.g. email
phoneNumberClaimTypeThe claim type used to extract the user's phone number, e.g. phone
subjectClaimTypeThe claim type used as the subject identifier, e.g. sub
verifyEnabledWhether this provider can be used to verify the user at a higher assurance level

Google

curl -i -X POST \
  https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/google \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "nameClaimType": "name",
      "emailClaimType": "email",
      "phoneNumberClaimType": "phone",
      "subjectClaimType": "subject",
      "usePkce": false,
      "authority": "https://accounts.google.com",
      "scope": "openid profile email"
    }
  }'
FieldDescription
authorityThe Google authority URL — typically https://accounts.google.com
scopeThe OAuth 2.0 scopes to request, e.g. openid profile email
usePkceWhether to use PKCE for the authorization code flow
nameClaimTypeThe claim type used to extract the user's name
emailClaimTypeThe claim type used to extract the user's email
phoneNumberClaimTypeThe claim type used to extract the user's phone number
subjectClaimTypeThe claim type used as the subject identifier

Signicat

Signicat is a Nordic eID provider supporting strong authentication methods such as BankID.

curl -i -X POST \
  https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/signicat \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "verifyEnabled": false,
      "authority": "https://yourorg.signicat.com/auth/open",
      "method": "BankId"
    }
  }'
FieldDescription
authorityThe Signicat authority URL for your environment, e.g. https://yourorg.signicat.com/auth/open
methodThe electronic ID method to enforce. One of: None, BankId, MitId, SBID
verifyEnabledWhether to verify user identity on each login

Manage providers

List providers

curl -i -X GET \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso?query=azure&page=1&pageSize=10' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Get a provider

Each provider type has its own get endpoint. Use the one matching the provider type:

curl -i -X GET \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/azuread/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X GET \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X GET \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/google/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X GET \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/signicat/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Update a provider

Send a PUT request with the same schema as the create request, including the provider id:

curl -i -X PUT \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/azuread/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": 0,
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "usePkce": true,
      "authority": "https://login.microsoftonline.com/{TenantId}/v2.0",
      "responseType": "code",
      "scope": "openid profile email"
    }
  }'
curl -i -X PUT \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": 0,
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "verifyEnabled": false,
      "responseType": "code",
      "nameClaimType": "name",
      "emailClaimType": "email",
      "phoneNumberClaimType": "phone",
      "subjectClaimType": "sub",
      "authority": "https://your-idp.example.com",
      "scope": "openid profile email",
      "getClaimsFromUserInfoEndpoint": false,
      "usePkce": false
    }
  }'
curl -i -X PUT \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/google/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": 0,
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "nameClaimType": "name",
      "emailClaimType": "email",
      "phoneNumberClaimType": "phone",
      "subjectClaimType": "subject",
      "usePkce": false,
      "authority": "https://accounts.google.com",
      "scope": "openid profile email"
    }
  }'
curl -i -X PUT \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/signicat/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": 0,
    "scheme": "string",
    "displayName": "string",
    "enabled": true,
    "type": "oidc",
    "properties": {
      "loginEnabled": true,
      "visible": true,
      "delegationEnabled": false,
      "autoProvisioningEnabled": true,
      "clientId": "my-client-id",
      "clientSecret": "my-client-secret",
      "verifyEnabled": false,
      "authority": "https://yourorg.signicat.com/auth/open",
      "method": "BankId"
    }
  }'

Delete a provider

curl -i -X DELETE \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/azuread/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X DELETE \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X DELETE \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/google/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
curl -i -X DELETE \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/signicat/{id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Auto-provisioning

When autoProvisioningEnabled is true, the first time a user signs in via an SSO provider, Aritma automatically creates a user subject for them. This means you do not need to pre-invite users before they can log in.


SCIM

Combine SSO with SCIM Provisioning if you want to also control which users exist on your tenant what groups they belong to from your identity provider.


Custom provider icon

For Custom type providers, you can upload a custom icon to display on the login button:

curl -i -X PUT \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom/{id}/icon' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: multipart/form-data' \
  -F icon=string

To remove the icon:

curl -i -X DELETE \
  'https://developer.aritma.com/_mock/apis/platform/iam/openapi/iam-openapi/v1/sso/custom/{id}/icon' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'