Download OpenAPI specification:Download
This guide describes list of API services that are provided by OT Rainbow authentication portal system. Services are used to manage OT Rainbow authentication.
REST interface is used for sending/receiving OT rainbow API messages.
HTTP request GET is used. Standard HTTP responses are used to provide requested information or error status. There is no session notion in OT Rainbow system, so requests could be issued according stateless model, without transport conservation between them.
JSON is used as a main format for data encoding in message body part. Each request is started with the following pattern /{module}/{version}/ where {module} is a portal module name to address and {version} is a version of used API, par example, “v1.0”.
Each request should contain some credential information to authenticate itself. Standard HTTP authentication with basic/bearer modes is used. JSON Web Token mechanism is used to provide authentication information. JWT has a expire timeout that is controlled by OT Rainbow portal to prevent very long token usage. Also authentication with application token is used. The token must be provided in the request HTTP header, using a custom header: APIKey. At server side, token is verified, and if it doesn’t match, 403 Not Allowed response is sent. TLS is used as a transport protocol to support message exchanges between OT Rainbow portal and an application.
For accessing the API, a valid JWT token or a valid OAuth access token can be passed in the 'Authorization' header.
Bearer xxxxxx.yyyyyyy.zzzzzz
Bearer xxxxxx.yyyyyyy.zzzzzz
Security Scheme Type | API Key |
---|---|
Header parameter name: | Authorization |
For accessing the API, a valid API Key can be provided instead of 'Authorization' Bearer JWT header
This authentication method is useful for some applications needing a permanent authentication or not able to expose an interface allowing the user to authenticate (scripts, bots, IOT devices, ...).
A valid API Key is obtained from the API POST /api/rainbow/authentication/v1.0/apikeys.
When API Key authentication is used, the header x-rainbow-app-auth
is mandatory to authenticate the application accessing the API.
Security Scheme Type | API Key |
---|---|
Header parameter name: | x-rainbow-api-key |
Challenge for application authentication.
Should be randomly generated by the application (the challenge should be unique for each request for security reasons).
Mandatory only for authentication with x-rainbow-api-key
(not used for authentication with JWT).
Security Scheme Type | String |
---|
Application authentication
Basic <base64encode(appId
:sha256(appSecret
challenge
))> (Concatenation of appSecret
and provided challenge
, hashed with sha256).
The challenge used to compute the x-rainbow-app-auth
value must be the same as the one provided in header x-rainbow-challenge
.
Mandatory only for authentication with x-rainbow-api-key
(not used for authentication with JWT).
Security Scheme Type | String |
---|
This API allows Rainbow users to know that URL they can use to perform a login.
The authentication URLs depends of the user and/or his company's setting:
If no authentication method is configured on the user nor on its company, Rainbow password authentication method is used.
Rainbow passwordless authentication requires the user to have the feature SECURITY_PASSWORDLESS
in his profile. If that is not the case,
Rainbow password authentication method is used even if the user is configured to use passwordless authentication.
Some advanced user/device authentication performed by some SSO servers (Microsoft's conditional access, FIDO, Yubikey...) are not
correctly handled by Rainbow Desktop application (Electron based). In order to bye-pass these limitations, company's SSO settings can be configured
to be performed in user's browser instead of inside the Desktop client. This remote authentication mechanism is named backchannel
in this documentation.
To be noted that whatever the authentication configuration, admin users always have the Rainbow password authentication method returned (fallback in case of authentication configuration issues).
uid required | string User unique identifier:
|
country | string When the provided
Note that an error 400210 is returned in the case the provided |
uiLocales | string {0..255}] User preferred languages When user is configured to use OIDC authentication type, and when supported by the OIDC provider, It is up to the client to set this value (either by using browser's language preference or by asking the user). As stated by OIDC RFC:
Note that the |
useBackchannelPolling | boolean Specifies that backchannel polling mechanism has to be initiated. When
|
accept required | string application/json |
{- "data": [
- {
- "onlyUseImplicitFlow": false,
- "clientId": "4aca5ee9a087fb9218bfb662fe92605c",
- "type": "OIDC",
- "challenge": "dxV3ljthR6NZwHxH9ubfUkrc04xkGanAZT",
- "useBackchannel": true,
- "backchannelSession": {
- "id": "541b2028-83f8-4935-b71a-882e144dc005",
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MzA5OTYzNjMsImV4cCI6MTczMTAzMjM2MywiYXVkIjoiNjZkYjE0ZjRjYjlmMWQ3ZmQ0MjY1OWI3IiwianRpIjoiNTQxYjIwMjgtODNmOC00OTM1LWI3MWEtODgyZTE0NGRjMDA1In0.rA1HtiLJQ-XxgVF2goLQHxoQxj3XrnmykKN8-wljTeU"
}
}
]
}
This API allows Rainbow users to login.
The application is also authenticated during the user login.
If login is successful and multi-factor authentication isn't activated for user (or activated but not configured), the API returns a JSON Web Token (<abbr title="JSON Web Token">JWT) which has to be provided by clients for all Rainbow APIs requiring user authentication:
The JWT returned contains the following data in payload:
{
"countRenewed": 0, // Number of times the token has been renewed
"maxTokenRenew": 5, // Number of times the token can be renewed
"user": {
"id": "572756967bfbca0d0e09a6b4", // Logged in user id
"loginEmail": "user@company.com" // Logged in user loginEmail
},
"app": {
"id": "598983029db9b5b14693a6f0", // Application id used for the authentication
"name": "My App" // Application name
},
"iat": 1463588327, // (Issued At) Time at which the JWT was issued
"exp": 2183588327 // (Expiration Time) Expiration time after which the JWT won't be accepted
}
If the login
/ password
combination is wrong, an error 401 is return (errorDetailsCode 401500
).
If the appId
/ appSecret
combination is wrong, an error 401 is return (errorDetailsCode 401500
).
The following login protection is implemented:
401500
is returned.401501
is returned: the user account is locked for the given time period.401501
will be returned for each new login attempt for this user account
(even if a good login / password combination is provided). If the login / password combination is wrong, the locked time period restarts from this new wrong attempt.If multi-factor authentication is activated for the user and enabled, depending on the configuration of selected policy the API may return a JSON Web Token (<abbr title="JSON Web Token">JWT) which has to be provided by clients for all Rainbow MFA APIs requiring user authentication:
The JWT returned contains the following data in payload:
{
"maxTokenRenew": 0, // Number of times the token can be renewed
"user": {
"id": "572756967bfbca0d0e09a6b4", // Logged in user id
"loginEmail": "user@company.com" // Logged in user loginEmail
},
"app": {
"id": "598983029db9b5b14693a6f0", // Application id used for the authentication
"name": "My App" // Application name
},
"mfaType": "totp",
"iat": 1463588327, // (Issued At) Time at which the JWT was issued
"exp": 2183588327 // (Expiration Time) Expiration time after which the JWT won't be accepted
}
Warning
x-rainbow-app-auth required | string Application authentication Basic <base64encode( |
x-rainbow-client-version | string The client version The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the login is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
x-rainbow-trusted-appid | string an id associated to the application which realizes the login operation This id will be checked to the ones stored in datababase in case of multifactor authentication is activated for the user and configured to be run only for only unstrusted application |
accept required | string application/json |
{- "errorCode": 401,
- "errorMsg": "Unauthorized",
- "errorDetails": "User 5c00f9bdcf5d6c01cc8ff4b5 has a Voice Phone license. He is not authorized to log in to Rainbow.",
- "errorDetailsCode": 401223
}
This API allows Rainbow users to logout.
Note: This API must not be called with ApiKey as authentication method.
accept required | string application/json |
{- "status": "User user1@company.com successfully logged out",
- "data": [ ]
}
This API allows Rainbow users to renew their JSON Web Token (<abbr title="JSON Web Token">JWT), thus extending the expiration date of their current JWT.
This API requires user to be authenticated with a valid non expired JWT.
If so, a new JWT is returned, with the expiration date starting from now.
Warning:
x-rainbow-client-version | string The client version The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the JWT renew is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
accept required | string application/json |
{- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiNTZjNWMxOWY5NDE0MTc2NTExOWY4OTZjIiwibG9naW5FbWFpbCI6InVzZXIxQGNvbXBhbnkuY29tIn0sImlhdCI6MTQ1NjE1MTYzOCwiZXhwIjoxNDU2MTU4ODM4fQ.FlPLNcWY9pTr0QvMj3RpLZJxtqbbydNnWIEr-B2lc4Y6ea41bqJJ-e10Sk_S-1blnG71E7yT625qrkO-UCc0ywR6lWCylcAUkH7-fvjKQbET2mU-4yuNwTd-sNHGzGabgr4n5xtUSMaDunjDgF1kQDZ-dEFPF5NtbN1rdqZP9tzTXrpZ6rmrW2a1o13-hHl7sxN_FqHr_4u_8AhN4dMKUgG0qRjrc1GMJ88M8idH9zTsejU5YQyJqdYQS9T_fSoFzJtS0rmwNCJMdeF2tXj8YQeTjKAiPXoBwklm5xblHxWeCTz9tqfkw1XeNxSO0pOUmpwdpF8kbwDCCa2rgz1z3A",
- "mfaRequired": false,
- "loggedInUser": {
- "id": "56c5c19f94141765119f896c",
- "loginEmail": "user1@company.com",
- "loginPhone": {
- "isValidated": true,
- "E164": "+33312345678",
- "national": "0312345678",
- "nationalWithoutPrefix": "312345678",
- "E164WithoutPrefix": "33312345678",
- "E164WithNationalPrefix": "+330312345678",
- "E164WithNationalPrefixWithoutPrefix": "330312345678"
}, - "firstName": "Firstname",
- "lastName": "Lastname",
- "displayName": "Firstname Lastname",
- "nickName": "Nickname",
- "title": "Mr.",
- "jobTitle": "Research and Development",
- "emails": [
- {
- "email": "user1@company.com",
- "type": "work"
}, - {
- "email": "user1@home.com",
- "type": "home"
}
], - "phoneNumbers": [
- {
- "shortNumber": "1002",
- "pbxId": "PBX712e-bd96-0c27-4350-a3ff-dc0c-83e7-c246",
- "systemId": "57dc0644f44a97c9155cd462",
- "country": "FRA",
- "number": "0390676767",
- "numberE164": "+33390676767",
- "phoneNumberId": "58876dad81e063e01187dd24",
- "isMonitored": true,
- "isFromSystem": true,
- "deviceType": "landline",
- "type": "work"
}, - {
- "number": "0390909090",
- "country": "FRA",
- "numberE164": "+33390909090",
- "phoneNumberId": "577e2e9b86c953de7838d635",
- "systemId": null,
- "isFromSystem": false,
- "deviceType": "landline",
- "type": "home"
}, - {
- "number": "0690909090",
- "country": "FRA",
- "numberE164": "+33690909090",
- "phoneNumberId": "577e2e9b86c953de7838d636",
- "systemId": null,
- "isFromSystem": false,
- "deviceType": "mobile",
- "type": "home"
}
], - "country": "FRA",
- "language": "fr-FR",
- "timezone": "Europe/Paris",
- "jid_im": "2d2f1aaf5ce54a2dbae9d70490366562@openrainbow.com",
- "jid_tel": "tel_2d2f1aaf5ce54a2dbae9d70490366562@openrainbow.com",
- "jid_password": "3b3f6e2c927940b2875f1ec604c0363b",
- "roles": [
- "user",
- "superadmin"
], - "adminType": "undefined",
- "companyId": "569ce8c8f9336c471b98eda1",
- "companyName": "My company",
- "isInDefaultCompany": false,
- "organisationId": null,
- "siteId": null,
- "visibility": "same_than_company",
- "isActive": true,
- "isInitialized": true,
- "initializationDate": "2016-01-18T13:30:44.498Z",
- "activationDate": "2016-01-18T13:29:44.498Z",
- "creationDate": "2016-01-18T12:45:44.498Z",
- "lastUpdateDate": "2016-01-19T16:33:22.548Z",
- "lastAvatarUpdateDate": "2016-01-19T11:29:11.567Z",
- "createdBySelfRegister": true,
- "createdByAdmin": {
- "userId": "56d69d020c92b35b3041d433",
- "loginEmail": "superadmin@localhost.fr"
}, - "invitedBy": {
- "invitationId": "574ffe07170a86f3297bc35b",
- "invitationDate": "2016-01-15T13:29:44.498Z",
- "userId": "56d69d020c92b35b3041d533",
- "loginEmail": "user0@company.com"
}, - "firstLoginDate": "2016-01-18T13:29:44.498Z",
- "lastLoginDate": "2016-02-23T09:17:42.523Z",
- "loggedSince": "2016-02-23T09:17:42.523Z",
- "isTerminated": false,
- "guestMode": false,
- "profiles": [
- {
- "isDefault": true,
- "status": "active",
- "canBeSold": false,
- "businessModel": "none",
- "businessSpecific": [
- "NONE"
], - "isExclusive": false,
- "isPrepaid": false,
- "hasConference": false,
- "isBundle": false,
- "assignationDate": "2017-02-17T13:35:27.427Z",
- "provisioningNeeded": [ ],
- "subscriptionId": "5808da2e35d795966e61f9ce",
- "offerId": "58079ed2041fa586e92337cd",
- "offerName": "Essential",
- "profileId": "580777f56fbd22a442d4fb57",
- "profileName": "Essential",
- "offerReference": "RB-Essential",
- "offerDescription": "Rainbow Essential offer",
- "offerTechnicalDescription": "Essential"
}
], - "customData": {
- "key1ANumber": 123,
- "key2AString": "a string",
- "key3ABoolean": true,
- "key4AnObject": {
- "myKey": "My value"
}
}, - "fileSharingCustomisation": "enabled",
- "userTitleNameCustomisation": "enabled",
- "softphoneOnlyCustomisation": "disabled",
- "useRoomCustomisation": "enabled",
- "phoneMeetingCustomisation": "enabled",
- "useChannelCustomisation": "enabled",
- "useScreenSharingCustomisation": "enabled",
- "useWebRTCAudioCustomisation": "enabled",
- "useWebRTCVideoCustomisation": "enabled",
- "instantMessagesCustomisation": "enabled",
- "userProfileCustomisation": "enabled",
- "fileStorageCustomisation": "enabled",
- "overridePresenceCustomisation": "enabled",
- "changeTelephonyCustomisation": "enabled",
- "changeSettingsCustomisation": "enabled",
- "recordingConversationCustomisation": "enabled",
- "useGifCustomisation": "enabled",
- "useDialOutCustomisation": "enabled",
- "fileCopyCustomisation": "enabled",
- "fileTransferCustomisation": "enabled",
- "forbidFileOwnerChangeCustomisation": "enabled",
- "readReceiptsCustomisation": "enabled",
- "useSpeakingTimeStatistics": "enabled",
- "useTeamsMode": "enabled",
- "userAvatarCustomisation": "enabled",
- "selectedAppCustomisationTemplate": null,
- "useRoomAsRBVoiceUser": "disabled",
- "useWebRTCAudioAsRBVoiceUser": "disabled",
- "canAccessWhatsNew": "enabled",
- "canAccessFaqCustomisation": "enabled",
- "canAccessHelpCenterCustomisation": "enabled",
- "canAccessStoreCustomisation": "disabled",
- "canDownloadAppCustomisation": "enabled",
- "canUseTestConfigCustomisation": "enabled",
- "canUseSendReportCustomisation": "enabled",
- "canUseTaskCustomisation": "enabled",
- "canCallParticipantPbxNumberCustomisation": "enabled",
- "canSetInvisiblePresenceCustomisation": "enabled"
}, - "loggedInApplication": {
- "id": "08ad88a0028011e8bd1a8788ab975478",
- "name": "My application",
- "type": "web",
- "activity": "J",
- "ownerId": "573f189f774e0a428ee813a3",
- "dateOfCreation": "2018-05-04T14:12:41.413Z",
- "dateOfDeploymentRequest": "2018-06-18T07:22:16.530Z",
- "dateOfDeployment": "2018-06-18T07:22:16.530Z",
- "env": "deployed",
- "state": "active",
- "platform": "official"
}
}
This API allows the user to get a once-time access code (OTP) to be used for passwordless login. This access code has then to be provided to the API POST /api/rainbow/authentication/v1.0/passwordless/login in order to proceed to the passwordless authentication and retrieve a JWT token.
This API is meant to be used by users configured to use passwordless authentication method:
authenticationType
is not set)
and their company's default authentication method is a rainbowPasswordlessPolicies
(authentication setting having enabledForAllCompanyUsers
set to true)rainbowPasswordlessPolicies
of their company (their setting authenticationType
is set to RAINBOW
and their rainbowPasswordlessPolicy.rainbowPasswordlessPolicyId
is set to one of their company's rainbowPasswordlessPolicies
)
The user must have the feature SECURITY_PASSWORDLESS
in his profile.Depending on their company's rainbowPasswordlessPolicies
configured for the user:
The access code:
A user can only request up to 5 codes per hour without success authentication. If the user requests a 6th code in less than 1 hour, an error 403538 is returned.
uid required | string User unique identifier:
|
country | string When the provided
Note that an error 400210 is returned in the case the provided |
accept required | string application/json |
{- "data": {
- "codeLength": 6,
- "codeDuration": 60,
- "expirationDate": "2024-04-12T08:22:40.148Z",
- "smsSent": true,
- "smsSentTo": "+*********89",
- "emailSent": false
}
}
This API allows Rainbow users to use a once-time access code (OTP) in order to login to Rainbow.
This API is meant to be used by users configured to use passwordless authentication method:
authenticationType
is not set)
and their company's default authentication method is a rainbowPasswordlessPolicies
(authentication setting having enabledForAllCompanyUsers
set to true)rainbowPasswordlessPolicies
of their company (their setting authenticationType
is set to RAINBOW
and their rainbowPasswordlessPolicy.rainbowPasswordlessPolicyId
is set to one of their company's rainbowPasswordlessPolicies
)
The user must have the feature SECURITY_PASSWORDLESS
in his profile.The access code to set in this API is obtained using with the API GET /api/rainbow/authentication/v1.0/passwordless/code.
The application is also authenticated during the user login.
If login is successful, the API returns a JSON Web Token (<abbr title="JSON Web Token">JWT) which has to be provided by clients for all Rainbow APIs requiring user authentication:
The JWT returned contains the following data in payload:
{
"countRenewed": 0, // Number of times the token has been renewed
"maxTokenRenew": 5, // Number of times the token can be renewed
"user": {
"id": "572756967bfbca0d0e09a6b4", // Logged in user id
"loginEmail": "user@company.com" // Logged in user loginEmail
},
"app": {
"id": "598983029db9b5b14693a6f0", // Application id used for the authentication
"name": "My App" // Application name
},
"iat": 1463588327, // (Issued At) Time at which the JWT was issued
"exp": 2183588327 // (Expiration Time) Expiration time after which the JWT won't be accepted
}
If the uid
/ code
combination is wrong, an error 401 is return (errorDetailsCode 401610
).
If the appId
/ appSecret
combination is wrong, an error 401 is return (errorDetailsCode 401500
).
The following login protection is implemented:
401610
is returned.401611
is returned: the user account is locked for the given time period.401611
will be returned for each new login attempt for this user account
(even if a good uid / code combination is provided). If the uid / code combination is wrong, the locked time period restarts from this new wrong attempt.code required | string Passwordless code |
uid required | string User unique identifier Must be the same uid than the one used to obtain the code (see API GET /api/rainbow/authentication/v1.0/passwordless/code) |
{- "code": "string",
- "uid": "string"
}
{- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiNTZjNWMxOWY5NDE0MTc2NTExOWY4OTZjIiwibG9naW5FbWFpbCI6InVzZXIxQGNvbXBhbnkuY29tIn0sImlhdCI6MTQ1NjE1MTYzOCwiZXhwIjoxNDU2MTU4ODM4fQ.FlPLNcWY9pTr0QvMj3RpLZJxtqbbydNnWIEr-B2lc4Y6ea41bqJJ-e10Sk_S-1blnG71E7yT625qrkO-UCc0ywR6lWCylcAUkH7-fvjKQbET2mU-4yuNwTd-sNHGzGabgr4n5xtUSMaDunjDgF1kQDZ-dEFPF5NtbN1rdqZP9tzTXrpZ6rmrW2a1o13-hHl7sxN_FqHr_4u_8AhN4dMKUgG0qRjrc1GMJ88M8idH9zTsejU5YQyJqdYQS9T_fSoFzJtS0rmwNCJMdeF2tXj8YQeTjKAiPXoBwklm5xblHxWeCTz9tqfkw1XeNxSO0pOUmpwdpF8kbwDCCa2rgz1z3A",
- "mfaRequired": false,
- "loggedInUser": {
- "id": "56c5c19f94141765119f896c",
- "loginEmail": "user1@company.com",
- "loginPhone": {
- "isValidated": true,
- "E164": "+33312345678",
- "national": "0312345678",
- "nationalWithoutPrefix": "312345678",
- "E164WithoutPrefix": "33312345678",
- "E164WithNationalPrefix": "+330312345678",
- "E164WithNationalPrefixWithoutPrefix": "330312345678"
}, - "firstName": "Firstname",
- "lastName": "Lastname",
- "displayName": "Firstname Lastname",
- "nickName": "Nickname",
- "title": "Mr.",
- "jobTitle": "Research and Development",
- "emails": [
- {
- "email": "user1@company.com",
- "type": "work"
}, - {
- "email": "user1@home.com",
- "type": "home"
}
], - "phoneNumbers": [
- {
- "shortNumber": "1002",
- "pbxId": "PBX712e-bd96-0c27-4350-a3ff-dc0c-83e7-c246",
- "systemId": "57dc0644f44a97c9155cd462",
- "country": "FRA",
- "number": "0390676767",
- "numberE164": "+33390676767",
- "phoneNumberId": "58876dad81e063e01187dd24",
- "isMonitored": true,
- "isFromSystem": true,
- "deviceType": "landline",
- "type": "work"
}, - {
- "number": "0390909090",
- "country": "FRA",
- "numberE164": "+33390909090",
- "phoneNumberId": "577e2e9b86c953de7838d635",
- "systemId": null,
- "isFromSystem": false,
- "deviceType": "landline",
- "type": "home"
}, - {
- "number": "0690909090",
- "country": "FRA",
- "numberE164": "+33690909090",
- "phoneNumberId": "577e2e9b86c953de7838d636",
- "systemId": null,
- "isFromSystem": false,
- "deviceType": "mobile",
- "type": "home"
}
], - "country": "FRA",
- "language": "fr-FR",
- "timezone": "Europe/Paris",
- "jid_im": "2d2f1aaf5ce54a2dbae9d70490366562@openrainbow.com",
- "jid_tel": "tel_2d2f1aaf5ce54a2dbae9d70490366562@openrainbow.com",
- "jid_password": "3b3f6e2c927940b2875f1ec604c0363b",
- "roles": [
- "user",
- "superadmin"
], - "adminType": "undefined",
- "companyId": "569ce8c8f9336c471b98eda1",
- "companyName": "My company",
- "isInDefaultCompany": false,
- "organisationId": null,
- "siteId": null,
- "visibility": "same_than_company",
- "isActive": true,
- "isInitialized": true,
- "initializationDate": "2016-01-18T13:30:44.498Z",
- "activationDate": "2016-01-18T13:29:44.498Z",
- "creationDate": "2016-01-18T12:45:44.498Z",
- "lastUpdateDate": "2016-01-19T16:33:22.548Z",
- "lastAvatarUpdateDate": "2016-01-19T11:29:11.567Z",
- "createdBySelfRegister": true,
- "createdByAdmin": {
- "userId": "56d69d020c92b35b3041d433",
- "loginEmail": "superadmin@localhost.fr"
}, - "invitedBy": {
- "invitationId": "574ffe07170a86f3297bc35b",
- "invitationDate": "2016-01-15T13:29:44.498Z",
- "userId": "56d69d020c92b35b3041d533",
- "loginEmail": "user0@company.com"
}, - "firstLoginDate": "2016-01-18T13:29:44.498Z",
- "lastLoginDate": "2016-02-23T09:17:42.523Z",
- "loggedSince": "2016-02-23T09:17:42.523Z",
- "isTerminated": false,
- "guestMode": false,
- "profiles": [
- {
- "isDefault": true,
- "status": "active",
- "canBeSold": false,
- "businessModel": "none",
- "businessSpecific": [
- "NONE"
], - "isExclusive": false,
- "isPrepaid": false,
- "hasConference": false,
- "isBundle": false,
- "assignationDate": "2017-02-17T13:35:27.427Z",
- "provisioningNeeded": [ ],
- "subscriptionId": "5808da2e35d795966e61f9ce",
- "offerId": "58079ed2041fa586e92337cd",
- "offerName": "Essential",
- "profileId": "580777f56fbd22a442d4fb57",
- "profileName": "Essential",
- "offerReference": "RB-Essential",
- "offerDescription": "Rainbow Essential offer",
- "offerTechnicalDescription": "Essential"
}
], - "customData": {
- "key1ANumber": 123,
- "key2AString": "a string",
- "key3ABoolean": true,
- "key4AnObject": {
- "myKey": "My value"
}
}, - "fileSharingCustomisation": "enabled",
- "userTitleNameCustomisation": "enabled",
- "softphoneOnlyCustomisation": "disabled",
- "useRoomCustomisation": "enabled",
- "phoneMeetingCustomisation": "enabled",
- "useChannelCustomisation": "enabled",
- "useScreenSharingCustomisation": "enabled",
- "useWebRTCAudioCustomisation": "enabled",
- "useWebRTCVideoCustomisation": "enabled",
- "instantMessagesCustomisation": "enabled",
- "userProfileCustomisation": "enabled",
- "fileStorageCustomisation": "enabled",
- "overridePresenceCustomisation": "enabled",
- "changeTelephonyCustomisation": "enabled",
- "changeSettingsCustomisation": "enabled",
- "recordingConversationCustomisation": "enabled",
- "useGifCustomisation": "enabled",
- "useDialOutCustomisation": "enabled",
- "fileCopyCustomisation": "enabled",
- "fileTransferCustomisation": "enabled",
- "forbidFileOwnerChangeCustomisation": "enabled",
- "readReceiptsCustomisation": "enabled",
- "useSpeakingTimeStatistics": "enabled",
- "useTeamsMode": "enabled",
- "userAvatarCustomisation": "enabled",
- "selectedAppCustomisationTemplate": null,
- "useRoomAsRBVoiceUser": "disabled",
- "useWebRTCAudioAsRBVoiceUser": "disabled",
- "canAccessWhatsNew": "enabled",
- "canAccessFaqCustomisation": "enabled",
- "canAccessHelpCenterCustomisation": "enabled",
- "canAccessStoreCustomisation": "disabled",
- "canDownloadAppCustomisation": "enabled",
- "canUseTestConfigCustomisation": "enabled",
- "canUseSendReportCustomisation": "enabled",
- "canUseTaskCustomisation": "enabled",
- "canCallParticipantPbxNumberCustomisation": "enabled",
- "canSetInvisiblePresenceCustomisation": "enabled"
}, - "loggedInApplication": {
- "id": "08ad88a0028011e8bd1a8788ab975478",
- "name": "My application",
- "type": "web",
- "activity": "J",
- "ownerId": "573f189f774e0a428ee813a3",
- "dateOfCreation": "2018-05-04T14:12:41.413Z",
- "dateOfDeploymentRequest": "2018-06-18T07:22:16.530Z",
- "dateOfDeployment": "2018-06-18T07:22:16.530Z",
- "env": "deployed",
- "state": "active",
- "platform": "official"
}
}
This API allows Rainbow users to login using OpenID Connect (OIDC) authentication (using authorization code grant) if this type of authentication is provided by their company.
Authorization code grant is recommended as it is more secure than Implicit grant (it involves a clientSecret from Rainbow application). This API is dedicated to Authorization code grant, the OIDC flow being completely handled by Rainbow authentication server.
In order to use this API, the OIDC SingleSignOn settings of the company must contain:
clientId
: the client_id for the Rainbow application created on the company's OIDC provider,clientSecret
: the client_secret for the Rainbow application created on the company's OIDC provider,issuer
: the company's OIDC provider issuer (should has been got from discoveryUrl if OIDC
settings has been configured with this parameter).authorizationEndpoint
: the company's OIDC provider authorization endpoint (should has been got from
discoveryUrl if OIDC settings has been configured with this parameter).tokenEndpoint
: the company's OIDC provider token endpoint (should has been got from discoveryUrl if OIDC
settings has been configured with this parameter).jwksUri
: the company's OIDC provider jwks_uri endpoint (should has been got from discoveryUrl if OIDC
settings has been configured with this parameter).The full OIDC flow using Authorization Code grant is detailed in the following sequence diagram.
This GET /api/rainbow/authentication/v1.0/oidc-client/login endpoint addresses points 3 to 7 of this diagram
(point 2 is addressed by GET /api/rainbow/authentication/v1.0/urls?uid=user@company.com endpoint, see related documentation).
Details about the sequence diagram:
to know what is the authentication type to use for this user.
x-rainbow-app-auth
field has to be provided in query parameters to authenticate the application (sha256 hash is computed using the challenge)finds the OIDC SSO setting of his company and validates the id_token
(validation of id_token signature, id_token expiration, issuer and audience fields).
ssoAuthenticationRedirectUrl (default to Official Rainbow web client) with this jwt in query string (tkn query parameter).
In the case errors occur during the OIDC client login flow, the browser is redirected to the application’s ssoAuthenticationRedirectUrl (default to Official Rainbow web client) with the following query parameters:
errtype
: always set to OIDC for errors returned by this API,errcode
: an error detailed code associated to the error (ex: 401500)errmsg
: an error message code associated to the error (ex: Unknown application or wrong token for application id 204583b32039df11e9a07425538fb36c74)companyId required | string User company identifier This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com |
loginHint | string User login hint This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com
in the case the |
uiLocales | string User preferred languages When supported by the OIDC provider, As stated by OIDC RFC:
This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com
in the case the
Note that the |
challenge required | string Challenge for application authentication This value can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com |
x-rainbow-app-auth required | string Application authentication It has to be computed as follow: <base64encode(appId:sha256(appSecretchallenge))> (concatenation of appSecret and challenge, hashed with sha256). The challenge used to compute the |
x-rainbow-client-version | string The client version In the case the parameter x-rainbow-client-version could not be provided in the headers, it can be provided in the query string parameters. The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the login is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
backchannelSessionId | string Backchannel session identifier, allowing client application to perform the SSO authentication flow in the user's browser (i.e. outside the application) and getting the authenticated user's JWT from a polling API. This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com
in the case the client requests to use backchannel polling and the |
useBackchannelAuthenticationRedirectUrl | boolean Allows client application to perform the SSO authentication flow in the user's browser (i.e. outside the application) and to get the authenticated user's JWT from the backchannelAuthenticationRedirectUrl set in application's configuration (the browser is redirected to this URL at the end of the OIDC authentication flow with user's JWT set in tkn query parameter).
|
x-rainbow-client-version | string The client version The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the login is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
{- "tkn": "string"
}
This API allows Rainbow users to login using SAML authentication if this type of authentication is provided by their company.
companyId required | string User company identifier This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com |
challenge required | string Challenge for application authentication This value can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com |
x-rainbow-app-auth required | string Application authentication It has to be computed as follow: <base64encode(appId:sha256(appSecretchallenge))> (concatenation of appSecret and challenge, hashed with sha256). The challenge used to compute the |
x-rainbow-client-version | string The client version The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the login is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
backchannelSessionId | string Backchannel session identifier, allowing client application to perform the SSO authentication flow in the user's browser (i.e. outside the application) and getting the authenticated user's JWT from a polling API. This value is automatically set in the loginUrl which can be retrieved using GET /api/rainbow/authentication/v1.0/urls?uid=user1@company.com
in the case the client requests to use backchannel polling and the |
useBackchannelAuthenticationRedirectUrl | boolean Allows client application to perform the SSO authentication flow in the user's browser (i.e. outside the application) and to get the authenticated user's JWT from the backchannelAuthenticationRedirectUrl set in application's configuration (the browser is redirected to this URL at the end of the SAML authentication flow with user's JWT set in tkn query parameter).
|
{- "None": { }
}
This endpoints allows applications to get authorization from Rainbow users to use Rainbow APIs with their account. This delegation of access can be performed using OAuth 2.0 Authorization code grant or Implicit grant.
While both OAuth 2.0 Authorization Code grant and Implicit grant are supported by Rainbow, Authorization Code grant is recommended as it is more secure.
Implicit grant is recommended for browser applications implemented in JavaScript that can't provide a backend server handling the token exchange flow of OAuth Authorization Code grant. Indeed, such applications should not embed appSecret in their source code for security reasons, and Implicit grant allow them to retrieve the OAuth access token without sending the appSecret to Rainbow server (redirect_uri is the only security available with this flow). The limitation of implicit grant is that only an access token is returned, which has a limited lifetime and can't be renewed. Application has to execute again the whole Implicit grant flow to retrieve a new access token.
To enable Implicit grant for an application, the application's setting enableOAuthImplicitGrant
has to
be set to true (it is disabled by default).
For more information, see the OAuth 2.0 RFC related to authorization endpoint:
Note that Rainbow applications are named client in OAuth 2.0 RFC.
The OAuth Authorization Code Grant flow is detailed in the following sequence diagram.
This GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint addresses points 1 to 7 of this diagram for Authorization code grant flow
(points 8 to 9 are addressed by POST /api/rainbow/authentication/v1.0/oauth/token endpoint).
Details about the sequence diagram:
(1) User is on application website
(1) User accesses to application content that needs data from Rainbow, or application allows to login with Rainbow,
… (use case depends of the application needs)
(2) Application redirects to OAuth authorize endpoint on Rainbow authentication server.
Some query string parameters are provided in the query (defined by OAuth 2.0 RFC):
response_type
: "code" for requesting an authorization code (authorization code grant)client_id
: the application identifier (appId)redirect_uri
: application's backend endpoint where the authorization code will be sent.
scope
: scope of the access requested by the application.
state
: a "random" value sent by the client to maintain a state between the request and the callback.
Can be used to protect against cross-site request forgery attacks (CSRF).(3) Rainbow authentication server checks that the client_id
sent in query parameter in (2) corresponds to a valid application in the database.
(4) User enters his credentials on login page and submit the form. Rainbow authentication server checks in the database if user credentials are valid.
(5) Rainbow authentication server redirects user's browser to consent page (except if app's setting disableOAuthConsentScreen is true, in this case step (6) is skipped).
(6) User authorize the application to access Rainbow APIs in his name. The form is submitted on Rainbow authentication server.
(7) If the user authorized, Rainbow authentication server generates an authorization code and redirects user's browser to application backend's redirect_uri
(the one provided in query parameters in (2)).
Note that redirect_uri
must be one of the configured oauthRedirectUris
in the application, otherwise an error is returned.
The following data are returned in query parameters of the redirection uri (defined by OAuth 2.0 RFC):
code
: the authorization code that can be exchanged against an access token and a refresh token using token endpoint.
Authorization code has a short lifetime (10 minutes) and can only be used once.state
: if state was provided in (2), this value is returned (otherwise a random value is returned).If the user declined, Rainbow authentication server redirects user's browser to application backend's redirect_uri
with an error in query parameters.
Once the application has the authorization code, it has to exchange it against an access token and a refresh token using POST /api/rainbow/authentication/v1.0/oauth/token endpoint, points 8 and 9 of the sequence diagram (see documentation of this endpoint for more information).
The OAuth Implicit Grant flow is detailed in the following sequence diagram.
Unlike Authorization Code grant flow, this GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint is the only one to be used by the application to retrieve the OAuth access token.
Details about the sequence diagram:
(1) User uses the web application on his browser
(1) User accesses to web application content that needs data from Rainbow, or web application allows to login with Rainbow, … (use case depends of the application needs)
(2) Application redirects to OAuth authorize endpoint on Rainbow authentication server.
Some query string parameters are provided in the query (defined by OAuth 2.0 RFC):
response_type
: "token" for requesting an access token (implicit grant)client_id
: the application identifier (appId)redirect_uri
: web application's endpoint where the authorization code will be sent.scope
: scope of the access requested by the application.
state
: a "random" value sent by the client to maintain a state between the request and the callback.
Can be used to protect against cross-site request forgery attacks (CSRF).(3) Rainbow authentication server checks that the client_id
sent in query parameter in (2) corresponds to a valid application in the database.
(4) User enters his credentials on login page and submit the form. Rainbow authentication server checks in the database if user credentials are valid.
(6) User authorize the application to access Rainbow APIs in his name. The form is submitted on Rainbow authentication server.
(7) If the user authorized, Rainbow authentication server generates an access token and redirects user's browser to web application's redirect_uri
(the one provided in query parameters in (2)).
Note that redirect_uri
must be one of the configured oauthRedirectUris
in the application, otherwise an error is returned.
The following data are returned in fragment component of the redirection uri (defined by OAuth 2.0 RFC):
access_token
: the access token that can be used by the application to use Rainbow APIs,token_type
: the type of token returned ("access_token"),expires_in
: the lifetime of the access token (in seconds),state
: if state was provided in (2), this value is returned (otherwise a random value is returned).If the user declined, Rainbow authentication server redirects user's browser to application's redirect_uri
with an error in fragment component.
Once the application has the access token, it can use it to use Rainbow APIs with the account of the related Rainbow user.
response_type required | string Desired grant type to use for authorize endpoint.
For more information, details are available in the OAuth 2.0 RFC, section 3.1.1 and section 4.1.1 (Authorization Code grant) or section 4.2.1 (Implicit grant). |
client_id required | string Unique identifier of the application requesting the authorization
(also documented as For more information, details are available in the OAuth 2.0 RFC, section 2.2 and section 4.1.1 (Authorization Code grant) or section 4.2.1 (Implicit grant). |
redirect_uri | string Application's endpoint URI where the user-agent will be redirected with the authorization code (Authorization Code grant) or access token (Implicit grant) if the user grants access to the application. Errors are redirected to this endpoint as well, for example in the case the user declines access to the application. If If If Authorization Code grant is used, this endpoint should use TLS for security reasons, as sensitive data are sent to application's endpoint through a public network. For more information, details are available in the OAuth 2.0 RFC, section 3.1.2 and section 4.1.1 (Authorization Code grant) or section 4.2.1 (Implicit grant). |
scope | string The scope of the Rainbow API access requested by the application. For now, only For more information, details are available in the OAuth 2.0 RFC, section 3.3 and section 4.1.1 (Authorization Code grant) or section 4.2.1 (Implicit grant). |
state | string A random string that can be provided by the application to maintain state between the authorize request and the redirection to redirect_uri endpoint (state is sent back by Rainbow authentication server to redirect_uri endpoint). This should be used by the application to prevent against cross-site request forgery (CSRF). For more information, details are available in the OAuth 2.0 RFC, section 4.1.1. For more information regarding cross-site request forgery (CSRF) threat, details are available in the section 10.12. |
x-rainbow-client-version | string The client version The client version is used to verify if the client application has the minimal version required to use the Rainbow servers infrastructure. If the version of the client is under the configured minimal version, the login is refused and an error 403 is returned (403020). The minimal version required is set by the Rainbow infrastructure team when needed (for example, when some breaking changes has been added on server side, when a security issue has been identified on client side, ...). Client version example: 1.75.0 |
content-type required | string application/x-www-form-urlencoded |
{- "access_token": "string",
- "code": "string",
- "expires_in": 0,
- "state": "string",
- "token_type": "string"
}
This endpoints allows applications to get an access token allowing them to use Rainbow APIs with the account of the related Rainbow user.
Access token has a short lifetime (1 hour). A refresh token is issued as well, allowing applications to refresh their access token (and such avoiding the application to request user authorization again with GET /api/rainbow/authentication/v1.0/oauth/authorize).
The token endpoint can be used:
For more information, see the OAuth 2.0 RFC, section 4.1.3 related to the use of this endpoint to exchange the authorization code against an access token and a refresh token.
The OAuth Access Token Request flow is detailed in the following sequence diagram.
This POST /api/rainbow/authentication/v1.0/oauth/token endpoint addresses points 8 to 9 of this diagram
(points 1 to 7 are addressed by GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint).
Details about the sequence diagram:
(8) application's backend exchanges the authorization code it retrieved in (7) against an access token and a refresh token.
For that, it calls the OAuth token endpoint on Rainbow authentication server. It has to provide:
The header Authorization with Basic <base64encode(client_id
:client_secret
)>.
This request has to be done from the application''s backend so that the client_secret (appSecret) remains confidential.
Example of base64 calculation:
base64("78e98ee09bad11e8b8edebb50d679df6:2UrOcs3agk34zaV3Jsf01vM54iLyqwBEpnv5vJr72D9cE5wMVQeEe3BM7IxzyyJD") =
<i>NzhlOThlZTA5YmFkMTFlOGI4ZWRlYmI1MGQ2NzlkZjY6MlVyT2NzM2FnazM0emFWM0pzZjAxdk01NGlMeXF3QkVwbnY1dkpyNzJEOWNFNXdNVlFlRWUzQk03SXh6eXlKRA==</i>
In the body the parameters (x-www-form-urlencoded):
grant_type
: must be set to "authorization_code" for an exchange of an authorization code against an access token and a refresh token
code
: the authorization code sent by Rainbow authentication server in (7)
redirect_uri
: the redirect_uri parameter, must be the same than the one used to retrieve the authorization code (the one sent in (2))
For that, it calls the Rainbow APIs with the header Authorization Bearer
Access token has a short lifetime (1 hour). If the application tries to use an expired access token for a request on Rainbow API, an error 401 Unauthorized is returned. Access token can be renewed using the refresh token, this avoids the application to redo the whole OAuth authorization code flow.
For more information, see the OAuth 2.0 RFC, section 6 related to the refresh of an access token.
The OAuth Refresh Access Token flow is detailed in the following sequence diagram.
Details about the sequence diagram:
(1) User is on application website
(1) User accesses to application content that needs data from Rainbow (use case depends of the application needs).
The application has already an OAuth access token and a refresh token retrieved using the authorization code grant described in "OAuth Authorization Code Grant sequence diagram".
(1) Application calls the Rainbow API (whatever the portal is) to access Rainbow user data.
It provides the header Authorization: Bearer <access_token>
in the request.
(2) Rainbow API portal checks the validity of the access token (existing, not expired).
(2) If the access token is expired, an error 401 Unauthorized is returned. The application needs to renew the access token.
(3) [optional, depends of the application implementation] If the application is executed in the browser (JavaScript), it needs to request its backend to get a new access token.
If the request to Rainbow API is already performed in the application's backend, the backend itself can renew the access token.
(4) Application's backend calls the OAuth token endpoint on Rainbow authentication server. It has to provide:
client_id
:client_secret
)>.
This request has to be done from the application's backend so that the client_secret (appSecret) remains confidential. Example of base64 calculation:
base64("78e98ee09bad11e8b8edebb50d679df6:2UrOcs3agk34zaV3Jsf01vM54iLyqwBEpnv5vJr72D9cE5wMVQeEe3BM7IxzyyJD") =
<i>NzhlOThlZTA5YmFkMTFlOGI4ZWRlYmI1MGQ2NzlkZjY6MlVyT2NzM2FnazM0emFWM0pzZjAxdk01NGlMeXF3QkVwbnY1dkpyNzJEOWNFNXdNVlFlRWUzQk03SXh6eXlKRA==</i>
In the body the parameters (x-www-form-urlencoded)
grant_type
: must be set to "refresh_token" to request a new access token using the refresh tokenrefresh_token
: the refresh token sent by Rainbow authentication serverenableOAuthRefreshTokenRotation
setting is enabled for this application (it is enabled by default), a new refresh token is also generated and
this new one is returned in the body of the HTTP response. The current refresh token is then revoked.In the case the application is running in the browser, the backend returns the new access token to its frontend.
code | string The authorization code sent by Rainbow authentication server from the GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint. Mandatory to exchange an authorization code against an access token. Note that once it has been used, the authorization code is revoked. For more information, details are available in the OAuth 2.0 RFC, section 4.1.3. |
grant_type required | string Enum: "authorization_code" "refresh_token" Desired grant type to use for token endpoint. Must be set to:
|
redirect_uri | string The redirect_uri used to retrieve the authorization code sent by Rainbow authentication server from the GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint. Mandatory to exchange an authorization code against an access token. For more information, details are available in the OAuth 2.0 RFC, section 4.1.3. |
refresh_token | string The refresh token sent by Rainbow authentication server from the GET /api/rainbow/authentication/v1.0/oauth/authorize endpoint of from a previous refresh token performed using this POST /api/rainbow/authentication/v1.0/oauth/token endpoint. Mandatory to refresh an access token. The provided refresh_token must not be expired. If the refresh token is expired, the application has to redo the whole OAuth authorization code flow. Note that once it has been used to refresh an access token, the refresh_token is revoked. The new refresh token returned in the response with the access token replaces the previous one. For more information, details are available in the OAuth 2.0 RFC, section 6. |
{- "code": "string",
- "grant_type": "authorization_code",
- "redirect_uri": "string",
- "refresh_token": "string"
}
{- "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiNTcyNzU2OTY3YmZiY2EwZDBlMDlhNmI0In0sImFwcCI6eyJpZCI6Ijc4ZTk4ZWUwOWJhZDExZThiOGVkZWJiNTBkNjc5ZGY2IiwibmFtZSI6IkFwcF9SYWluYm93XzEifSwib2F1dGgiOnsidHlwZSI6ImFjY2Vzc190b2tlbiIsInNjb3BlIjoiYWxsIn0sImlhdCI6MTU1MzUyMDE2NH0.pKyIDJWWk6N3Ee0slCF2tZNGzGmX5xpzPAgYaDQ93pohVjpHaOdAgIDE0LEK68DudQSIZnUUi3DklpbrS75tQBRJX95e-zYiQTa2fARBVPxwwOnx3PROtVh1eJvZrBsJK3MiPi-mQCGL8RZICJux1_igKy7f_Bhl7hdswJ7gZMW1WSqRYJWD93Fdlchj-qrquO0dKxzkfJMDjKyQzVCGEb8ChUvtTO7QFKeyhgHfP5nXEgkDd4LPMr9hjfJ1rqtEl3sbWJvo6DWuRZqTd3AvWgIKgprtQePC8QEtdpl-1LBBhrAI_y0RNs0u67ODKXQjZPdIBM07XnVAAD6JrHGGhg",
- "expires_in": 3600,
- "token_type": "Bearer",
- "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiNTcyNzU2OTY3YmZiY2EwZDBlMDlhNmI0In0sImFwcCI6eyJpZCI6Ijc4ZTk4ZWUwOWJhZDExZThiOGVkZWJiNTBkNjc5ZGY2IiwibmFtZSI6IkFwcF9SYWluYm93XzEifSwib2F1dGgiOnsidHlwZSI6InJlZnJlc2hfdG9rZW4iLCJzY29wZSI6ImFsbCJ9LCJpYXQiOjE1NTM1MjAxNjR9.hauDetfLAglWLiBTwPg8ArCSolAN4S9BIjl_vJ5D5mNpduPWEvDjjcuiRSfVYg9rNmowSSlhk2ISDPvqPkViuLlGeYbaBdPqea4NZCYI1mK-wwJcDw1VyT4f2JagNJaAI-vmadxj9en2MLjXekGSAIQ79cObElJI0L8vezEPPcloupvMLmFzCTCThRNZuEM1aaTF4-Ov-lEy3DrDOpNigPwXpT0JA4GtN4w7GTXCu2YAC0RswA8y3x_uwWx7IHe76haW2b22V6euwYQ2zd2Wb8Hq2aSz7afGKGWgWXJycotlZz9ZSwx4NkDT4XY_Nqy2wZgijcgqq21xq9S5E7puOQ",
- "scope": "all"
}