Mobile Identity Connect

Introduction

Mobile Identity Connect (MIC) is a service that bridges mobile applications with existing enterprise identity and single sign-on solutions. MIC enables mobile applications to integrate with a variety of identity solutions using a single OAuth2-based interface. This allows enterprise application developers to avoid the complexity of integrating these protocols into mobile, while providing enterprise IT the means to ensure that access to resources is secured only to authenticated users, as well as maintaining full control over a mobile user's identity.

Core Concepts

Mobile Identity Connect Architecture

Mobile Identity Connect Architecture

Mobile Identity Connect (MIC) is the authentication layer for connecting to mobile identity systems. It uses OAuth2 as its underlying identity protocol for connecting client applications. A client application uses OAuth2 to authenticate with the Kinvey Authentication Service. The service provides a login page or redirects to an existing SSO login page, allowing the client user to authenticate.

MIC's architecture enables multi-factor authentication (MFA) for mobile clients during the authentication process by exposing MFA controls through the login page.

Once authenticated, MIC retrieves a token from the underlying identity provider, encrypts it, and securely stores it for use in all future requests to access enterprise resources through Data Link connectors. A Mobile Identity Connect access token is returned to the client, along with an (optional) refresh token.

The client exchanges this token for a Kinvey session token. The Kinvey Cloud Service (KCS) then validates this token with MIC for all future requests from that session token. User credentials are not stored on the device and are never passed directly to KCS.

MIC maintains an internal time-to-live (TTL) for access and refresh tokens which is configured via the Kinvey management console. MIC will re-authenticate the user after the TTL expires which will cause the underlying authentication system to be asked to obtain any tokens again. The TTL should be configured to match the lifetime of the internal authentication.

Mobile Identity Connect Architecture with Auth Link Connector

Mobile Identity Connect Architecture

Mobile Identity Connect offers many out of the box integrations, but when one is not available for your identity provider, a custom AuthLink can be created to integrate with a host of custom identity systems, such as SSO cookies, database-based authentication, or authentication against a line of business application.

The custom auth link connector sits between Kinvey and internal authentication systems. The adaptor is responsible for verifying the credentials provided from MIC against one or more internal enterprise authentication systems. The adaptor is also responsible for obtaining any internal enterprise authentication tokens, such as SSO cookies, SAML assertions, OAuth tokens, or session tokens. Tokens passed back to MIC will be stored in the encrypted MIC vault and provided to Kinvey Data Link Connectors during normal Kinvey request processing.

All links controlled by Kinvey are encrypted using TLS. Links not controlled by Kinvey are expected to use TLS encryption for production deployments.

Keep in mind that SSO Providers often store their own session data in cookies and logging out from Kinvey will clear Kinvey's session and refresh tokens from the local device, and cause subsequent requests that use these tokens to fail with a 401 Unauthorized response. However, SSO providers may independently retain their sessions via cookies, enabling a user to log into the Kinvey app again through SSO without re-entering their password.

For instance, using Ping Identity with SAML-Redirect, the user will remain authenticated on Ping Identity website after logging out from the associated Kinvey application. This would enable a user to login to their Kinvey app after being logged out, i.e. if they remain logged in to Ping Identity.

Single Sign on across multple Kinvey Mobile Apps

Applications developed with MIC can share authentication credentials between applications hosted on the same device when they use the same Auth Services. An access token granted by Mobile Identity Connect is valid for any environment that is using that specific Auth Service.

Configuring an Auth Service

When two applications share the MIC Auth Services, they can also share the access token between them. This allows a Single Sign On experience for a user on a single device. For example if an enterprise develops an expense reporting application and a separate field service management applications, users of the two apps will only need to log in to either app once to be logged in for both applications. The Kinvey mobile libraries support this feature by storing the access token in secure shared storage on the device. This is configured within Kinvey by using Auth Services on each environment from a shared scope, such as an Organization.

Service Catalog

Configuration of Authentication Services is performed in the Service Catalog of the management console. To configure a connector to an Enterprise Identity Source, click the “Add a Service” button and and select "RapidAuth" from the service types and follow up by selecting the type of connector that you want to configure. This will take you to a configuration page with a form specific to each type of connector. See the following sections for details of each specific type of connector.

An auth-service can be created with a scope of a specific environment or at an Organization level. Organization level Auth-services may be used by any environment belonging to the organization. During configuration, the connector must be associated with an environment by selecting the appropriate application and then the environment. Enterprise customers may also choose to associate the connector with their Organization. A list of one or more connectors can be created for each environment or organization.

Configuring the Environment

Once at least one auth connector has been configured for an environment or an organization, it can be activated by navigating to the Mobile Identity Connect tab of the environment details view.

Environment Mobile Identity Connect

On this page the user can view the set of available services and switch between the environment set or the organization level set, if applicable. Additionally, the default connector can be selected from this view. The default connector is used in the authentication flow if the developer chooses to not specify an auth connector by ID when initiating the authentication flow

Connector Specific Configuration

SAML

Mobile Identity Connect supports SAML SP initiated SSO via POST-POST and Redirect-Post Bindings. Mobile Identity Connect does not support IdP-initiated SSO.

Configuring Kinvey

Configure SAML

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth Service protocol to use, set this to SAML-Redirect or SAML-POST based on your IdP requirements.Yes
Provider URIThe single sign-on service URL provided by the SAML Identity ProviderYes
Redirect URI'sThe OAuth 2.0 redirect URI - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
Logout URIThe Logout URI provided by the SAML Identity ProviderYes
CertificateThe X.509 Certificate text provided by the SAML Identity ProviderYes
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLThe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

Users of Ping Identity's PingOne service should use the "Initiate Single Sign-On (SSO) URL" that is provided by PingOne when adding Kinvey as an application.

Configuring your SAML Identity Provider to accept Kinvey Requests

When configuring the SAML-Based SSO Identity Provider (IdP), the following information should be used. (note: if you are running a dedicated instance of Kinvey, replace auth.kinvey.com with the URI of your MIC instance. Contact Kinvey Support if you do not know the URI of your instance).

FieldDescriptionValue
entityIdThe unique SAML entityID for MIC.https://auth.kinvey.com/kinvey-mobile-identity-connect
Metadata URIThe signle sign-on service URL provided by the SAML Identity Providerhttps://auth.kinvey.com/v2/saml/metadata
Assertion Consumer ServiceThe SAML Assertion URI where SAML assertions will be passed to MIC by the IdPhttps://auth.kinvey.com/v2/saml/assertion/
Logout URLThe SAML logout URIhttps://auth.kinvey.com/v2/saml/logout
Name ID FormatThe format that Kinvey expects for the auth identifying NameIDurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

Note the version component of the SAML urls. Please ensure that this version number "v2" matches the version of the MIC API that is being used from your application. The SAML metadata may vary between versions.

The v1 entityID is kivney-mobile-identity-connect while the v2+ entityID is https://auth.kinvey.com/kinvey-mobile-identity-connect. The various SAML urls in the metadata will also incorporate the version number.

If the version component is left out of the url, the v1 metadata will be served.

Users of Ping Identity's PingOne service can find a pre-configured link to Kinvey's Moble Identity Connect in the application catalog by searching for "Kinvey".

Kinvey does not directly support SSO Single Logout. The SAML identity provider should be accessed manually if single logout is required.

SAML Assertion Attributes

Kinvey supports the passing of SAML assertions to enterprise data sources through Data Link Connectors. Depending on the security requirements of your organization, different SAML attributes may be required for authorization purposes by your data sources. Mobile Identity Connect is configured to accept any attributes in the SAML assertion, and passes them through to any Data Link Connectors as-is.

OAuth2

Mobile Identity Connect supports Authorization Code and Resource Owner Password Credentials Authorization Grant credential types. See your OAuth2 provider administrator or Section 1.3 of the OAuth2 specification for more details.

Configuring Kinvey

Configure OAuth2

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth Service protocol type to use, set this to OAuth2Yes
Provider URIThe token endpoint provided by the OAuth2 ProviderYes
Redirect URI'sThe OAuth 2.0 redirect URI to be used by the client app - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
Grant TypeThe OAuth2 Grant Type to be requested. Authorization Code and Resource Owner Password Credentials are supported.Yes
Grant EndpointThe OAuth 2.0 authorization grant endpoint provided by the OAuth2 providerYes
Client IdThe client id supplied by the OAuth2 providerYes
Client SecretThe client secret supplied by the OAuth2 providerYes
User Id AttributeThe attribute to be used to obtain the userId. If no User Id endpoint is supplied, the service will look for the specified attribute in the id_token attribute of the token response. If a User Id endpoint is supplied, a request will be made to that endpoint and the user id will be obtained from the specified attribute.Yes
User Id EndpointAn endpoint from which to obtain the user id, found in many OAuth2 implementationsNo
ScopeAny scope attributes as defined by the OAuth2 providerNo
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLThe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

Configuring your OAuth2 Identity Provider to accept Kinvey Requests

When configuring the OAuth2-Based SSO Identity Provider, the following information should be used. (note: if you are running a dedicated instance of Kinvey, replace auth.kinvey.com with the URI of your MIC instance. Contact Kinvey Support if you do not know the URI of your instance).

FieldDescriptionValue
Redirect UriThe URI to which the grant code will be sent.https://auth.kinvey.com/oauth2/redirect

In addition, you should obtain a client id, client secret, authorization grant endpoint, and token endpoint from the administrator of your OAuth2 provider, along with the location of the userId attirbute. Note that the userId endpoint response must be in JSON format. If the uri for the endpoint requires an argument to use JSON, this should be included here.

OpenID Connect

Configuring Kinvey

Configure OpenID Connect

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth service protocol type to use, set this to OpenID ConnectYes
Provider URIThe token endpoint provided by the OpenID Connect ProviderYes
Redirect URI'sThe OAuth 2.0 redirect URI to be used by the client app - this should be configured to a Callback URI that will be used to pass the OAuth 2.0 GrantYes
Grant EndpointThe authorization grant endpoint provided by the OpenID Connect providerYes
Client IdThe client id supplied by the OpenID Connect providerYes
Client SecretThe client secret supplied by the OpenID Connect providerYes
Issuer IdentifierThe issuer identifier supplied by the OpenID Connect providerYes
ScopeAny scope attributes as defined by the OpenID Connect provider. Include multiple scopes by inserting a space between each scope. You can include both OpenID Connect specific scopes (profile, email, address, phone) and custom scopes.No
Do not customize the login experienceDo not use any customization for the OpenID Connect login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OpenID Connect login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth 2.0 grant is valid to obtain an OAuth 2.0 tokenNo
Token TTLThe time (in seconds) that an OAuth 2.0 token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth 2.0 refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth 2.0 refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

Configuring your OpenID Connect Identity Provider to accept Kinvey Requests

When configuring the OpenID Connect SSO Identity Provider, the following information should be used. (note: if you are running a dedicated instance of Kinvey, replace auth.kinvey.com with the URI of your MIC instance. Contact Kinvey Support if you do not know the URI of your instance).

FieldDescriptionValue
Redirect UriThe URI to which the grant code will be sent.https://auth.kinvey.com/oidc/redirect

In addition, you should obtain a client id, client secret, authorization grant endpoint, token endpoint and issuer identifier from the administrator of your OpenID Connect provider.

Active Directory

Configure Active Directory

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth service protocol to use, set this to Active DirectoryYes
Provider URIThe Active Directory URIYes
Redirect URI'sThe OAuth 2.0 redirect URI - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
Base DNThe Active Directory base DNYes
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLThe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

LDAP

Configure LDAP

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth service protocol to use, set this to LDAPYes
Provider URIThe LDAP URIYes
Redirect URI'sThe OAuth 2.0 redirect URI - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLThe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

SAML-WRAP

Configure WRAPv0.9

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth service protocol to use, set this to SAML-WRAPYes
Provider URIThe URI of the WRAP APIYes
Redirect URI'sThe OAuth 2.0 redirect URI - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
WRAP ScopeThe requested scope as provided by your IdPYes
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLThe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

Custom Authlink

Configure Custom Auth Link

In the Kinvey console Auth Service configuration, the following fields should be filled in:

FieldDescriptionRequired?
Type of ProviderAuth service protocol to use, set this to CustomYes
Provider URIThe URI of the Auth Link ConnectorYes
Redirect URI'sThe OAuth 2.0 redirect URI - this should be configured to a Callback URI that will be used to pass the OAuth GrantYes
Do not customize the login experienceDo not use any customization for the OAuth login pageNo
Use a custom CSS stylesheet for the login pageUse a CSS file to customize the look-and-feel of the OAuth login page (specify the URL of the stylesheet)No
Use a custom login page that I will hostUse a login page hosted outside of Kinvey for the login page (specify the URL of the hosted login page)No
Grant TTLThe time (in seconds) that an OAuth grant is valid to obtain an OAuth tokenNo
Token TTLTHe time (in seconds) that an OAuth token is accepted before requiring a new login or refreshNo
Allow Refresh TokensEnable OAuth refresh token supportNo
Refresh Token TTLThe time (in seconds) that an OAuth refresh token is acceptedNo
Allowed AttributesSee the section on attributes and mappingsYes
Data Link Header MappingsSee the section on attributes and mappingsYes

For details on building a custom AuthLink connector, see the section on Building a Custom AuthLink.

Attributes and Mappings

The Allowed Attributes and Data Link Header Mappings settings in the Kinvey Console connector configuration control how enterprise authentication tokens are sent to a data link connector. The attributes id and audience must be included in this section. Click “Add an allowed attribute, and enter the properties.

Configure Attribute Mappings

To send any of these attributes to a data link connector a Data Link Header Mapping is required. Click “Add a header mapping …” and enter client_token as the key and X-Kinvey-Auth as the value. Data link requests will have a header named X-Kinvey-Auth containing the token as a Base64 encoded string.

Authenticating with Mobile Identity Connect

Clients authenticate with Kinvey’s MIC using the OAuth 2.0 protocol. Complete documentation of the OAuth 2.0 protocol is detailed by the IETF.

Information about Refresh Tokens can be found at http://tools.ietf.org/html/rfc6749#section-1.5.

All OAuth implementations authenticate the user and return a grant code via a redirect callback URI. For native applications (Android, iOS and Xamarin) the Redirect URI can be any valid URI, record the value and use it during the normal OAuth flow. For hybrid applications (PhoneGap, etc) follow the framework guides for intercepting redirects and use the same Redirect URL as specified in the console. For web applications choose the Redirect URL where the web app listens for OAuth grants.

Authorization Grant

The authorization code grant flow of the OAuth2 spec provides a two-step authentication process. In the first step, the user is presented with a server-side login page for authentication. In Kinvey's implementation, that login page can be either provided by Mobile Identity Connect (with or without custom styling) or can be independently created and hosted, with Kinvey acting as the router to that page. The login credentials are forwarded to the underlying authentication source for authentication. Upon successful authentication, a short-lived authorization grant code is generated which can be used to create an access token.

Users requiring multi-factor authentication (MFA) support must use the authorization code grant flow configured to use the authentication providers login page.

In the case of SAML-Redirect, the login page is provided by the SAML IdP. Upon successful authentication, a callback URI is invoked with a grant code included in the query string. The grant code is then exchanged for an access token, which is used to authenticate to Kinvey, and exchanged for a Kinvey token.

Keep in mind that a SSO Provider may maintain its own session state independent of the Kinvey app, and Kinvey apps with a third-party SSO Provider configured may be accessible via the Provider site after Kinvey session tokens have been invalidated (as a new session can simply be created by way of SSO). For instance, using Ping Identity with SAML-Redirect, the user will remain authenticated on Ping Identity website after logging out from the associated Kinvey application. This would enable a user to login to their Kinvey app after being logged out, i.e. if they remain logged in to Ping Identity.

OAuth Client IDs

The OAuth2 Spec uses the notion of a client identifier to recognize the application that is accessing the identity service. For Kinvey Mobile Applications, the client id value is either the App key from the environment or a combination of the App Key and an Auth Service Id value.

If your application only has a single MIC Auth Service configured, then you can simply use the App Key as the client id value.

When you are using multiple Auth Service configurations, you can control which auth service is selected by providing a specific Auth Service Id with your App Key in the client id. To create a composite client id, concatenate the App Key with the Auth Service Id using a dot "kid_1234.123456789". If you are using a library, the MIC login functions will accept an additional parameter for the Auth Service Id. Specifying an Auth Service Id is always optional. The Auth Service Id is displayed on the Auth Service Listing in the MIC section of the environment. See the following image for an example of where to obtain the Auth Service Id.

Auth Service Id Values

All requests to Mobile Identity Connect use the base URL of https://auth.kinvey.com/. If you are using a dedicated instance of Kinvey with a different base URL, then append the instance ID to the base URL in the format https://<instance>-auth.kinvey.com).

Initiate grant request

To initiate the auth flow, a grant request must first be initiated by invoking the below endpoint within your app using a WebView or linking directly to the browser:

GET /oauth/auth?client_id=<your_app_id>&redirect_uri=<redirect_uri>&response_type=code HTTP/1.1
HOST auth.kinvey.com

The query string parameters are:

ParameterDescription
client_idThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe uri that the grant will redirect to on authentication, as set in the console. Note, this must exactly match one of the redirect URIs configured in the console.
response_typeThis should be set to 'code'

This will render a login page for the user to authenticate from the Identity Provider.

Once authenticated, a callback will be initiated by issuing a 302 redirect to the url specified in the redirect_uri query parameter. For native apps, the URL scheme must be registered to intercept the appropriate redirects. For web apps, a service must be provided listening at the redirect URL. The redirect will include a query string parameter code which will contain the auth grant code. For example:

myAppUri://?code=<authGrantCode goes here>

or

https://someurl.com/oauth/callback?code=<authGrantCode goes here>

Note the auth grant code has a short time to live - it expires after 10 seconds.

Initiate token request

Once the auth grant code is obtained, an access token is generated by invoking the token endpoint:

POST /oauth/token HTTP/1.1
Host: auth.kinvey.com
Authorization: [app secret credentials]
Content-Type: application/x-www-form-urlencoded

client_id=<clientid>&grant_type=authorization_grant&redirect_uri=<redirect_uri>&code=<grant code>

In the request body, include (in x-www-form-urlencoded format)

ParameterDescription
grant_typeAlways set to 'authorization_code'
client_idThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe same redirect uri used when obtaining the auth grant.
codeThe auth grant code obtained from the callback URI

A successful token request will return:

HTTP/1.1 200 OK
Content-Type: application/json

{
  access_token:  <token>,
  refresh_token: <refreshToken>,
  token_type: 'bearer',
  expires_in: <token lifetime>
}

Logging in to Kinvey

The access token is used to authenticate to Kinvey, and is exchanged for a Kinvey session token:

POST /user/:appKey/ HTTP/1.1
Host: baas.kinvey.com
Content-Type: application/json
Authorization: [Basic Auth with app credentials]

{
  "_socialIdentity":
  {
    "kinveyAuth":
    {
      "access_token": <access token>
    }
  }
}

This generates a Kinvey user that is authenticated with kinveyAuth, with a link to Mobile Identity Connect.

HTTP/1.1 201 Created
Location: https://baas.kinvey.com/user/:appKey/:id
Content-Type: application/json

{
  "_id": "507242b8a8fd60a5120020b4",
  "username": "2f127d3e-94ad-44fa-8cbe-48fde6ca12bb",
  "password": "3fc29620-0cdd-419c-ac26-d6006ebab22c",
  "_socialIdentity":
  {
     "kinveyAuth":
     {
       "id": "904292911550952250171",
     }
  },
  "_kmd":
  {
     "lmt": "2012-10-17T21:14:47.975Z",
     "ect": "2012-08-27T19:24:47.975Z",
     "authtoken": "66569abc-79aa-11c3-a042-958f1bbf4661.luCTBPjmnPmu8PGMOxOrTnsvlK2H4dIQMC3jj8BULh0="
  },
  "_acl":
  {
    "creator": "507242b8a8fd60a5120020b4"
  }
}

For all subsequent requests until the user is logged out or the token is expired, the authtoken included in the response should be used in the Authorization header of each request.

Authorization kinvey 66569abc-79aa-11c3-a042-958f1bbf4661.luCTBPjmnPmu8PGMOxOrTnsvlK2H4dIQMC3jj8BULh0=

The _socialIdentity.kinveyAuth.id attribute contains the user ID used to authenticate with MIC, and which can be used for subsequent token logins without having to create a new user. This is done by invoking the login method with a new access token and the user ID included:

POST /user/:appKey/login HTTP/1.1
Host: baas.kinvey.com
Content-Type: application/json
Authorization: [Basic Auth with app credentials]

{
  "_socialIdentity":
  {
    "kinveyAuth":
    {
      "access_token": <access token>,
      "id": <user id>
    }
  }
}

Automated Authorization Grant Flow

The Automated Authorization Grant flow is a slightly modified version of the authorization grant flow, which allows the username and password to be submitted to a temporary uri rather than presenting a login page.

To initiate the auth flow, a grant request is initiated by invoking the auth endpoint within your app:

All requests to Mobile Identity Connect use the base URL of https://auth.kinvey.com/. If you are using a dedicated instance of Kinvey with a different base URL, then append the instance ID to the base URL in the format https://<instance>-auth.kinvey.com).

Initiate grant request

To initiate the auth flow, a grant request must first be initiated by invoking the below endpoint within your app using a WebView or linking directly to the browser:

POST /oauth/auth HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id=<appId>&redirect_uri=<redirectUri>&response_type=code

In the post, set the content-type to application/x-www-form-urlencoded. Note: The body must be in x-www-form-urlencoded format, not JSON as this is required by the OAuth2 spec.

The body parameters are:

ParameterDescription
client_idThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe uri that the grant will redirect to on authentication, as set in the console. Note, this must exactly match one of the redirect URIs configured in the console.
response_typeThis should be set to 'code'

This will return a JSON response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  temp_login_uri:  <some url>
}

This uri is valid for 10 seconds, and is used to send the username and password. To invoke it:

POST <temp_login_uri> HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id=<clientid>&redirect_uri=<redirect_uri>&response_type=code&username=<username>&password=<password>
ParameterDescription
client_idTThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe uri that the grant will redirect to on authentication, as set in the console. Note, this must exactly match one of the redirect URIs configured in the console.
response_typeThis should be set to 'code'

The body parameters are:

ParameterDescription
client_idTThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe uri that the grant will redirect to on authentication, as set in the console. Note, this must exactly match one of the redirect URIs configured in the console.
response_typeThis should be set to 'code'
usernameThe user name for the user to be authenticated
passwordThe password for the user to be authenticated

Once authenticated, a callback will be initiated by issuing a 302 redirect to the url specified in the redirect_uri query parameter. For native apps, the URL scheme must be registered to intercept the appropriate redirects. For web apps, a service must be provided listening at the redirect URL. The redirect will include a query string parameter code which will contain the auth grant code. For example:

myAppUri://?code=<authGrantCode goes here>

or

https://someurl.com/oauth/callback?code=<authGrantCode goes here>

Note the auth grant code has a short time to live - it expires after 10 seconds.

Initiate token request

Once the auth grant code is obtained, an access token is generated by invoking the token endpoint:

POST /oauth/token HTTP/1.1
Host: auth.kinvey.com
Authorization: [app secret credentials]
Content-Type: application/x-www-form-urlencoded

client_id=<clientid>&grant_type=authorization_grant&redirect_uri=<redirect_uri>&code=<grant code>

In the request body, include (in x-www-form-urlencoded format)

ParameterDescription
grant_typeAlways set to 'authorization_code'
client_idThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe same redirect uri used when obtaining the auth grant.
codeThe auth grant code obtained from the callback URI

A successful token request will return:

HTTP/1.1 200 OK
Content-Type: application/json

{
  access_token:  <token>,
  refresh_token: <refreshToken>,
  token_type: 'bearer',
  expires_in: <token lifetime>
}

Logging in to Kinvey

The access token is used to authenticate to Kinvey, and is exchanged for a Kinvey session token:

POST /user/:appKey/ HTTP/1.1
Host: baas.kinvey.com
Content-Type: application/json
Authorization: [Basic Auth with app credentials]

{
  "_socialIdentity":
  {
    "kinveyAuth":
    {
      "access_token": <access token>
    }
  }
}

This generates a Kinvey user that is authenticated with kinveyAuth, with a link to Mobile Identity Connect.

HTTP/1.1 201 Created
Location: https://baas.kinvey.com/user/:appKey/:id
Content-Type: application/json

{
  "_id": "507242b8a8fd60a5120020b4",
  "username": "2f127d3e-94ad-44fa-8cbe-48fde6ca12bb",
  "password": "3fc29620-0cdd-419c-ac26-d6006ebab22c",
  "_socialIdentity":
  {
     "kinveyAuth":
     {
       "id": "904292911550952250171",
     }
  },
  "_kmd":
  {
     "lmt": "2012-10-17T21:14:47.975Z",
     "ect": "2012-08-27T19:24:47.975Z",
     "authtoken": "66569abc-79aa-11c3-a042-958f1bbf4661.luCTBPjmnPmu8PGMOxOrTnsvlK2H4dIQMC3jj8BULh0="
  },
  "_acl":
  {
    "creator": "507242b8a8fd60a5120020b4"
  }
}

For all subsequent requests until the user is logged out or the token is expired, the authtoken included in the response should be used in the Authorization header of each request.

Authorization kinvey 66569abc-79aa-11c3-a042-958f1bbf4661.luCTBPjmnPmu8PGMOxOrTnsvlK2H4dIQMC3jj8BULh0=

The _socialIdentity.kinveyAuth.id attribute contains the user ID used to authenticate with MIC, and which can be used for subsequent token logins without having to create a new user. This is done by invoking the login method with a new access token and the user ID included:

POST /user/:appKey/login HTTP/1.1
Host: baas.kinvey.com
Content-Type: application/json
Authorization: [Basic Auth with app credentials]

{
  "_socialIdentity":
  {
    "kinveyAuth":
    {
      "access_token": <access token>,
      "id": <user id>
    }
  }
}

Refresh Token Grant

Refresh request

Once an access token is expired, an HTTP 401 response will be returned to the client on any subsequent requests. If refresh tokens are enabled, the client can obtain another access token without reauthenticating by submitting a request to the token endpoint:

POST /oauth/token HTTP/1.1
Host: auth.kinvey.com
Authorization: [app secret credentials]
Content-Type: application/x-www-form-urlencoded

client_id=<clientid>&grant_type=refresh_token&redirect_uri=<redirect_uri>&refresh_token=<refresh_token>

In the request body, include (in x-www-form-urlencoded format)

ParameterDescription
grant_typeAlways set to 'refresh_token'
client_idThe app key of the environment or the app key of the environment concatenated with an Auth Service Id.
redirect_uriThe same redirect uri used when obtaining the auth grant.
refresh_tokenThe refresh token

A successful refresh request will return:

HTTP/1.1 200 OK
Content-Type: application/json

{
  access_token:  <token>,
  refresh_token: <refreshToken>,
  token_type: 'bearer',
  expires_in: <token lifetime>
}

Note that both the access token and the refresh token are refreshed.

Refresh tokens are single-use. Once the token is used to obtain a new active token, it is no longer valid. A new refresh token is included in the refresh token response.

Logging into Kinvey

Since a refresh assumes that a user has already been created, the login method for Kinvey should be used to pass the new access token along with the appropriate ID:

POST /user/:appKey/login HTTP/1.1
Host: baas.kinvey.com
Content-Type: application/json
Authorization: [Basic Auth with app credentials]

{
  "_socialIdentity":
  {
    "kinveyAuth":
    {
      "access_token": <access token>,
      "id": <user id>
    }
  }
}

Invalidating Tokens

Sometimes for security reasons, or to log a user out, tokens need to be invalidated. This can be accomplished by invoking the invalidate endpoint and passing the user id in the query string.

GET /oauth/invalidate?user=<user id> HTTP/1.1
Authorization:  [app secret credentials]

This will invalidate both access tokens and refresh tokens for the given user id.

HTTP/1.1 204 OK

If, for any reason, all tokens need to be invalidated, forcing all users to re-login, the invalidateAll endpoint can be invoked:

GET /oauth/invalidateAll HTTP/1.1
Authorization:  [app secret credentials]

This will invalidate both access tokens and refresh tokens for all users associated with the given environment.

HTTP/1.1 204 OK

Building a Custom AuthLink

A custom authlink is a lightweight microservice that acts as a bridge between Mobile Identity Connect and an enterprise identity system. It can be deployed anywhere, and must implement a single HTTP endpoint (defined in the provider URI in the Kinvey console) which is invoked using an HTTP POST. If the provider URI is http://auth.example.com/a/u/th, it will be invoked as POST /a/u/th.

The payload is encoded as UTF-8 with Content-Type set to application/json. The payload contains:

{
    username: <string>,
    password: <string>
}

The adaptor is required to respond in one of two ways depending on error or success.

Error

On an error the adaptor is expected to return an HTTP status code of 401. An optional JSON body can be returned with a single property authError. The authError property can either be an object or a string.

If an object, the object must have two properties: error, and error_description. The error value must be one of the following:

  • server_error
  • access_denied
  • temporarily_unavailable

If the error does not match one of these three, server_error will be used. The error object returned to the client will be the contents of the authError object.

If authError is set to a string, then an error object will be constructed with authError.error set to server_error and the error_description set to the contents of the string.

Success

On success the adaptor is required to return an HTTP status code of 200 with a body encoded as UTF-8 with Content-Type set to application/json. The payload should contain:

{
    authenticated: true, 
    token: ""
}

where token is an arbitrary Base64 encoded string. This string should include all enterprise tokens that need to be sent to the data link connector. This object gets stored encrypted in the MIC value and is provided to data link connectors (per configured attributes and mappings).

Additional properties can be included in the response. These properties can be enabled by including them in the allowed attributes of your MIC configuration.

Error Types

The following are the possible errors that can be returned, with the corresponing reasons:

ErrorCause
invalid_grantThe Grant code being sent for the token request is invalid. This usually occurs if the request takes longer than the grant TTL configurable in the console (default 10 seconds but can be changed)
invalid_requestThe parameters that were submitted in the request from the client are invalid (e.g. incorrect redirect_uri, client_id (app Key), or client_secret (app secret).
invalid_clientThe client (app id) is invalid, or the client secret (app secret) and redirect uri are invalid for the specific client
invalid_tokenThe token is invalid. This often means that the token has expired, but can be caused by other issues (such as a token that was never valid).
server_errorA server error has occurred. This may indicate an error accessing the underlying auth source (e.g. the SAML SSO system, the OAuth system, a custom AuthLink Connector, etc).
access_deniedThe credentials submitted by the user are invalid
unauthorized_clientThe app is not authorized. (App Key and secret don't match)
unsupported_grant_typeThe grant type isn't supported by MIC. This error should never be received if using the Library methods.
invalid_scopeThe scope requested by the client is invalid.
temporarily_unavailableThe remote IdP service is temporarily unavailable.
Unknown ErrorAn unknown error. Please submit to support along with a requestId (if possible) and the date and time the error occured.
Got a question?