Authentication

This is the Authentication API Reference.

Tokens

In the documentation, references to Ably-compatible tokens typically refer either to an Ably Token, or an Ably JWT. For Ably Tokens, this can either be referring to the TokenDetails object that contain the token string or the token string itself. TokenDetails objects are obtained when requesting an Ably Token from the Ably service and contain not only the token string in the token attribute, but also contain attributes describing the properties of the Ably Token. For Ably JWT, this will be simply referring to a JWT which has been signed by an Ably private API key.

Auth object

The principal use-case for the Auth object is to create Ably TokenRequest objects with createTokenRequest or obtain Ably Tokens from Ably with requestToken, and then issue them to other "less trusted" clients. Typically, your servers should be the only devices to have a private API key, and this private API key is used to securely sign Ably TokenRequest objects or request Ably Tokens from Ably. Clients are then issued with these short-lived Ably Tokens or Ably TokenRequest objects, and the libraries can then use these to authenticate with Ably. If you adopt this model, your private API key is never shared with clients directly.

A subsidiary use-case for the Auth object is to preemptively trigger renewal of a token or to acquire a new token with a revised set of capabilities by explicitly calling authorize.

The Auth object is available as the auth attribute of an Ably REST client instance.

Ably::Auth Attributes

The Auth object exposes the following public attributes:

client_id

The client ID string, if any, configured for this client connection. See identified clients for more information on trusted client identifiers.

Ably::Auth Methods

authorize

TokenDetails authorize(TokenParams token_params, AuthOptions auth_options)

Instructs the library to get a new token immediately using the specified token_params and auth_options (or if none specified, the client library defaults). Also stores any token_params and auth_options passed in as the new defaults, to be used for all subsequent implicit or explicit token requests.

Any token_params and auth_options objects passed in will entirely replace (as opposed to being merged with) the currently saved token_params and auth_options.

Parameters

ParameterDescriptionType
token_paramsAn optional set of key value pairs containing the Ably Token parameters for the authorization requestTokenParams
auth_optionsAn optional set of key value pairs containing the authentication options for the authorization requestAuthOptions

Returns

On success, a TokenDetails object containing the details of the new or existing token along with the token string is returned.

Failure to obtain an token will raise an AblyException.

Example

Ruby

1

2

token_details = client.auth.authorize(client_id: 'bob')
puts "Success; token = #{token_details.token}"

create_token_request

TokenRequest create_token_request(TokenParams token_params, AuthOptions auth_options)

Creates and signs an Ably TokenRequest based on the specified token_params and auth_options. Note this can only be used when the API key value is available locally, due to it being required to sign the Ably TokenRequest. Otherwise, Ably TokenRequests must be obtained from the key owner. Use this to generate Ably TokenRequests in order to implement an Ably Token request callback for use by other clients.

Both auth_options and token_params are optional. When omitted or nil, the default Ably-compatible token parameters and authentication options for the client library are used, as specified in the ClientOptions when the client library was instantiated, or later updated with an explicit authorize request. Values passed in will be used instead of (rather than being merged with) the default values.

To understand why an Ably TokenRequest may be issued to clients in favor of an Ably Token, see Token Authentication explained.

Parameters

ParameterDescriptionType
token_paramsAn optional set of key value pairs containing the token parameters for the Ably TokenRequestTokenParams
auth_optionsAn optional set of key value pairs containing the authentication options for the Ably Token RequestAuthOptions

Returns

On success, a TokenRequest object is returned.

Failure to issue a TokenRequest will raise an AblyException.

Example

Ruby

1

2

token_request = client.auth.create_token_request(client_id: 'bob')
puts "Success; token request = #{token_request}"

request_token

TokenDetails request_token(TokenParams token_params, AuthOptions auth_options)

Calls the requestToken REST API endpoint to obtain an Ably Token according to the specified token_params and auth_options.

Both auth_options and token_params are optional. When omitted or nil, the default token parameters and authentication options for the client library are used, as specified in the ClientOptions when the client library was instantiated, or later updated with an explicit authorize request. Values passed in will be used instead of (rather than being merged with) the default values.

To understand why an Ably TokenRequest may be issued to clients in favor of an Ably Token, see Token Authentication explained.

Parameters

ParameterDescriptionType
token_paramsAn optional set of key value pairs containing the token parameters for the requested Ably TokenTokenParams
auth_optionsAn optional set of key value pairs containing the authentication options for the requested Ably TokenAuthOptions

Returns

On success, a TokenDetails object containing the details of the new Ably Token along with the token string is returned.

Failure to obtain an Ably Token will raise an AblyException.

Example

Ruby

1

2

token_details = client.auth.request_token(client_id: 'bob')
puts "Success; token = #{token_details.token}"

AuthOptions Hash

AuthOptions is a Hash object and is used when making authentication requests. These options will supplement or override the corresponding options given when the library was instantiated. The following key symbol values can be added to the Hash:

Attributes

NameDescriptionType
:auth_callbackA proc / lambda (called synchronously in REST and Realtime but does not block EventMachine in the latter) which is called when a new token is required. The role of the callback is to obtain a fresh token, one of: an Ably Token string (in plain text format); a signed TokenRequest; a TokenDetails (in JSON format); an Ably JWT. See our authentication documentation for details of the Ably TokenRequest format and associated API calls.Proc
:auth_urlA URL that the library may use to obtain a fresh token, one of: an Ably Token string (in plain text format); a signed TokenRequest; a TokenDetails (in JSON format); an Ably JWT. For example, this can be used by a client to obtain signed Ably TokenRequests from an application server.String
:auth_method:get The HTTP verb to use for the request, either :get or :postSymbol
:auth_headersA set of key value pair headers to be added to any request made to the authUrl. Useful when an application requires these to be added to validate the request or implement the response.Hash
:auth_paramsA set of key value pair params to be added to any request made to the authUrl. When the authMethod is GET, query params are added to the URL, whereas when authMethod is POST, the params are sent as URL encoded form data. Useful when an application require these to be added to validate the request or implement the response.Hash
:token_detailsAn authenticated TokenDetails object (most commonly obtained from an Ably Token Request response). This option is mostly useful for testing: since tokens are short-lived, in production you almost always want to use an authentication method that allows the client library to renew the token automatically when the previous one expires, such as :auth_url or :auth_callback. Use this option if you wish to use Token authentication. Read more about Token authenticationTokenDetails
:keyOptionally the API key to use can be specified as a full key string; if not, the API key passed into ClientOptions when instancing the Realtime or REST library is usedString
:query_timefalse If true, the library will query the Ably servers for the current time when issuing TokenRequests instead of relying on a locally-available time of day. Knowing the time accurately is needed to create valid signed Ably TokenRequests, so this option is useful for library instances on auth servers where for some reason the server clock cannot be kept synchronized through normal means, such as an NTP daemon. The server is queried for the current time once per client library instance (which stores the offset from the local clock), so if using this option you should avoid instancing a new version of the library for each request.Boolean
:tokenAn authenticated token. This can either be a TokenDetails object, a TokenRequest object, or token string (obtained from the token property of a TokenDetails component of an Ably TokenRequest response, or a JSON Web Token satisfying the Ably requirements for JWTs). This option is mostly useful for testing: since tokens are short-lived, in production you almost always want to use an authentication method that allows the client library to renew the token automatically when the previous one expires, such as :auth_url or :auth_callback. Read more about Token authenticationString, TokenDetails or TokenRequest

Ably::Models::TokenDetails

TokenDetails is a type providing details of Ably Token string and its associated metadata.

Attributes

NameDescriptionType
tokenThe Ably Token itself. A typical Ably Token string may appear like {{TOKEN}}String
expiresThe time at which this token expiresIntegerTime
issuedThe time at which this token was issuedIntegerTime
capabilityThe capability associated with this Ably Token. The capability is a a JSON stringified canonicalized representation of the resource paths and associated operations. Read more about authentication and capabilitiesString
client_idThe client ID, if any, bound to this Ably Token. If a client ID is included, then the Ably Token authenticates its bearer as that client ID, and the Ably Token may only be used to perform operations on behalf of that client ID. The client is then considered to be an identified clientString

Methods

NameDescriptionType
expired?True when the token has expiredBoolean

TokenDetails constructors

TokenDetails.from_json

TokenDetails.from_json(String json) -> TokenDetails

A static factory method to create a TokenDetails from a deserialized TokenDetails-like object or a JSON stringified TokenDetails. This method is provided to minimize bugs as a result of differing types by platform for fields such as timestamp or ttl. For example, in Ruby ttl in the TokenDetails object is exposed in seconds as that is idiomatic for the language, yet when serialized to JSON using to_json it is automatically converted to the Ably standard which is milliseconds. By using the fromJson method when constructing a TokenDetails, Ably ensures that all fields are consistently serialized and deserialized across platforms.

Parameters

ParameterDescriptionType
jsona TokenDetails-like deserialized object or JSON stringified TokenDetailsObject, String

Returns

A TokenDetails object

TokenParams Hash

TokenParams is a Hash object and is used in the parameters of token authentication requests, corresponding to the desired attributes of the Ably Token. The following key symbol values can be added to the Hash:

Attributes

NameDescriptionType
:capabilityJSON stringified capability of the Ably Token. If the Ably Token request is successful, the capability of the returned Ably Token will be the intersection of this capability with the capability of the issuing key. Find our more about how to use capabilities to manage access privileges for clients.String
:client_idA client ID, used for identifying this client when publishing messages or for presence purposes. The client_id can be any non-empty string. This option is primarily intended to be used in situations where the library is instantiated with a key; note that a client_id may also be implicit in a token used to instantiate the library; an error will be raised if a client_id specified here conflicts with the client_id implicit in the token. Find out more about client identitiesString
nonce:nonceAn optional opaque nonce string of at least 16 characters to ensure uniqueness of this request. Any subsequent request using the same nonce will be rejected.String
timestamp:timestampThe timestamp of this request. timestamp, in conjunction with the nonce, is used to prevent requests for Ably Token from being replayed.Time
ttl:ttl1 hour Requested time to live for the Ably Token being created in seconds When omitted, the Ably REST API default of 60 minutes is applied by AblyInteger (seconds)

Ably::Models::TokenRequest

TokenRequest is a type containing parameters for an Ably TokenRequest. Ably Tokens are requested using Auth#request_token

Attributes

NameDescriptionType
key_nameThe key name of the key against which this request is made. The key name is public, whereas the key secret is privateString
ttlRequested time to live for the Ably Token in seconds. If the Ably TokenRequest is successful, the TTL of the returned Ably Token will be less than or equal to this value depending on application settings and the attributes of the issuing key.Integer
timestampThe timestamp of this requestTime
capabilityCapability of the requested Ably Token. If the Ably TokenRequest is successful, the capability of the returned Ably Token will be the intersection of this capability with the capability of the issuing key. The capability is a JSON stringified canonicalized representation of the resource paths and associated operations. Read more about authentication and capabilitiesString
client_idThe client ID to associate with the requested Ably Token. When provided, the Ably Token may only be used to perform operations on behalf of that client IDString
nonceAn opaque nonce string of at least 16 charactersString
macThe Message Authentication Code for this requestString

TokenRequest constructors

TokenRequest.from_json

TokenRequest.from_json(String json) -> TokenRequest

A static factory method to create a TokenRequest from a deserialized TokenRequest-like object or a JSON stringified TokenRequest. This method is provided to minimize bugs as a result of differing types by platform for fields such as timestamp or ttl. For example, in Ruby ttl in the TokenRequest object is exposed in seconds as that is idiomatic for the language, yet when serialized to JSON using to_json it is automatically converted to the Ably standard which is milliseconds. By using the fromJson method when constructing a TokenRequest, Ably ensures that all fields are consistently serialized and deserialized across platforms.

Parameters

ParameterDescriptionType
jsona TokenRequest-like deserialized object or JSON stringified TokenRequestObject, String

Returns

A TokenRequest object

Ably JWT

An Ably JWT is not strictly an Ably construct, rather it is a JWT which has been constructed to be compatible with Ably. The JWT must adhere to the following to ensure compatibility:

  • The JOSE header must include:
    • kid - Key name, such that an API key of {{API_KEY}} will have key name {{API_KEY_NAME}}
  • The JWT claim set must include:
    • iat - time of issue in seconds
    • exp - expiry time in seconds
  • The JWT claim set may include:
    • x-ably-capability - JSON text encoding of the capability
    • x-ably-clientId - client ID

Arbitrary additional claims and headers are supported (apart from those prefixed with x-ably- which are reserved for future use).

The Ably JWT must be signed with the secret part of your Ably API key using the signature algorithm HS256 (HMAC using the SHA-256 hash algorithm). View the JSON Web Algorithms (JWA) specification for further information.

We recommend you use one of the many JWT libraries available for simplicity when creating your JWTs.