Skip to content

RSL Open License Protocol (OLP) 1.0 Draft Specification

Last updated: June 28, 2025

The RSL Open Licensing Protocol (OLP) is an extension of the OAuth 2.0 authorization framework. OLP introduces a new OAuth grant type, rsl, to support using RSL licenses as credentials for controlling access to digital assets.

The OLP protocol suite includes

  • a protocol for acquiring an RSL license for a digital asset
  • a protocol for checking if an RSL license grants access to a digital asset
  • a protocol for retrieving a license key to encrypt or decrypt a digital asset file

Other server capabilities including license registration, management, payment, and service-level policies are outside the scope of this specification and are left to the implementation of individual license server operators.

Client Authentication

OLP uses standard OAuth 2.0 client authentication to verify the identity of clients that want to interact with an RSL License Server. Each client is assigned a unique client_id and client_secret by the license server operator when the client registers with the server, and the client must use these credentials to authenticate itself when making requests to the server.

If the client is not authorized to for a request, the server responds with an error as defined in RFC 6749 Section 5.2.

Example: Client Credentials Flow

http
POST /token
Host: rslstandard.org/api
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)

Acquire an RSL License for a Digital Asset

To acquire an RSL license for a digital asset, the client submits a request to the license server using the OAuth 2.0 token endpoint with the grant type rsl. The request must include both a complete RSL <license> element that describes the terms under which the client wants to license the digital asset, and a resource parameter specifying the URL of the digital asset to be licensed.

This grant type allows a client to obtain an RSL License Token that serves as proof that the client has acquired an RSL license for a digital asset. The license token may later be introspected or used to retrieve encryption keys, as described in subsequent sections.

Endpoint

POST /token

Request Parameters

ParameterTypeDescription
grant_typestringMUST be set to rsl
licensestringA complete RSL <license> XML element of the requested licensing terms
resourcestringThe URL of the digital asset for which the license is being requested

Response Fields

If the request is valid and authorized, the license server responds with a license token that represents the acquired RSL license. The license token is returned in the form of an OAuth access token, with the token type set to rsl.

FieldTypeDescription
access_tokenstringA token representing the acquired RSL license
token_typestringAlways rsl
expires_inintegerLifetime of the token, in seconds

Example

Request

http
POST /token
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded

grant_type=rsl&
license=%3Clicense%3E...%3C%2Flicense%3E&
resource=https%3A%2F%2Fexample.com%2Farticle%2F123

Response

json
{
  "access_token": "rsl_cnNsLWNsaWVudC0xMjM6czNjcjN0S0VZ",
  "token_type": "rsl",
  "expires_in": 0
}

Error Responses

If the request is invalid or unauthorized, the license server responds with an HTTP 400 status code and a JSON object describing the error.

Error Format

json
{
  "error": "invalid_request",
  "error_description": "The request is missing a required parameter."
}
Error CodeDescription
invalid_requestThe request is missing a required parameter, includes an invalid parameter value, or is otherwise malformed
invalid_clientClient authentication failed (e.g., bad credentials or unknown client)
unauthorized_clientThe client is not authorized to use the rsl grant type
invalid_licenseThe license is either invalid or not available for the specified resource
invalid_resourceThe resource is either invalid or managed by this license server
unsupported_grant_typeThe grant_type value is not supported by the token endpoint
server_errorThe server encountered an unexpected condition that prevented it from fulfilling the request

Validate Access to a Digital Asset

This protocol allows a resource server or client to determine whether the terms of a previously issued license token permit access to a digital asset. This check is typically performed by a website before serving license-restricted content (see also Authenticating Web Crawlers) or by a client to verify that they are in compliance with license terms.

Validation is performed by submitting the license token and the digital asset URL to the license server’s introspection endpoint. This endpoint conforms to the OAuth 2.0 token introspection specification (RFC 7662), with OLP-specific extensions.

Endpoint

POST /introspect

Request Parameters

ParameterTypeDescription
tokenstringThe RSL license token to be validated
resourcestringThe URL of the digital asset whose access is being validated against the license token

Response Fields

FieldTypeDescription
activebooleanWhether the license token is valid and recognized by the license server
token_typestringAlways rsl
licensestringRSL <license> XML element represented by the license token
resourcestringURL of the digital asset covered by the RSL license
permittedbooleanWhether the license permits access to the specified resource
reasonstring(Optional) Human-readable explanation if access is denied

Example

Request

json
{
  "token": "rsl_cnNsLWNsaWVudC0xMjM6czNjcjN0S0VZ",
  "resource": "https://example.com/article/abc"
}

Successful Response

json
{
  "active": true,
  "token_type": "rsl",
  "license": "<license>...</license>",
  "resource": "https://example.com/",
  "permitted": true
}

Denied Response

json
{
  "active": true,
  "token_type": "rsl",
  "license": "<license>...</license>",
  "resource": "https://test.com/",
  "permitted": false,
  "reason": "License does not cover this resource"
}

Expired or Invalid Token

json
{
  "active": false
}

Error Responses

If the request is malformed or unauthorized, the server responds with HTTP 400 or 401 status codes and an error object conforming to RFC 7662 Section 2.3.

Error CodeDescription
invalid_requestMissing token or resource, or invalid parameter encoding
invalid_tokenLicense token is expired, revoked, or unrecognized
unauthorizedClient authentication failed or is not permitted to use this endpoint
server_errorThe server encountered an unexpected condition

Example Error

json
{
  "error": "invalid_request",
  "error_description": "Missing required parameter: resource"
}

Retrieve License Key to Encrypt or Decrypt a Digital Asset

This protocol allows a client to retrieve a JSON Web Key (JWK) to encrypt or decrypt a digital asset governed by an RSL license. This capability enables content owners to securely license nonpublic, proprietary content to client applications, including paywalled articles, books, videos, and datasets.

License keys are provisioned by the license server when an RSL license is registered for a digital asset, and a client with a valid RSL license token can retrieve the associated key using the /key endpoint.

Endpoint

POST /key

Request Parameters

ParameterTypeDescription
tokenstringA valid RSL license token previously obtained via the /token endpoint
resourcestringThe URL of the encrypted digital asset file

Response Fields

FieldTypeDescription
keyobjectA symmetric encryption key represented in JWK format
resourcestringThe URL of the encrypted digital asset file

The key object will include the following fields:

JWK FieldTypeDescription
ktystringKey type — always "oct" for symmetric keys
kidstringA unique identifier for the key (e.g., UUID)
kstringBase64url-encoded symmetric key (e.g., 128-bit AES key)
algstringEncryption algorithm used, such as "A128CTR"

Example

Request

json
{
  "token": "rsl_cnNsLWNsaWVudC0xMjM6czNjcjN0S0VZ",
  "resource": "https://example.com/media/episode-1.mp4.aes"
}

Successful Response

json
{
  "key": {
    "kty": "oct",
    "kid": "7e0d5c22-1234-4567-b89c-aabbccddeeff",
    "k": "L8sX8V3vB8r-k7oSdhZMQw",
    "alg": "A128CTR"
  },
  "resource": "https://example.com/media/episode-1.mp4.aes"
}

Error Responses

If the license token is invalid or the license does not permit access to the requested asset, the server responds with an appropriate error.

Error CodeDescription
invalid_tokenThe license token is expired, revoked, or not recognized
access_deniedThe license does not permit access for the specified resource
invalid_requestMissing or malformed token or resource parameter
unauthorizedClient authentication failed
server_errorThe server encountered an unexpected condition

Example Error

json
{
  "error": "access_denied",
  "error_description": "License does not permit access to this resource"
}

RSL™, Really Simple Licensing™, and the RSL Logo are trademarks of RSL Foundry. Terms of Service. Privacy.