The Key Provider Server example application demonstrates how you can enforce access control to a cloud storage solution. It provides a RESTful interface that your client application can use to export and import security keys.
The cryptographic keys used by BlackBerry Spark Communications Services to protect your communications are stored and distributed in a cloud storage solution of your choice. If your solution does not meet the Cloud Key Storage requirements, you may need a service layer to provide the access control necessary for security.
The Key Provider Server application demonstrates how an application service layer can be used to ensure users can only access the keys they own or the public keys of others. This example provides the following functionality:
-
Provides database access to only authenticated users by validating the JWT access token that's passed by the client application.
-
Allows only the user to read or write their private key data.
-
Allows only the user to write their public key data.
-
Allows all authenticated users to read public key data.
This example uses the popular cloud storage solution, Azure Cosmos DB. Please refer to the Developer Guide for more information about setting up Azure Cosmos DB for Cloud Key Storage.
When you have a Cosmos DB instance set up and configured, edit the Key Provider
Server's config.js file.
Set the applicationIds property to the GUID assigned to the application that
will be using the Key Provider Server. If you have more than one application
that will be using the server, this property accepts an array of GUIDs.
applicationIds: 'your_application_id',Set the tenantIds property to the GUID identifying the tenant whose users
will be accessing the applications using the Key Provider Server. If you are
providing access for more than one tenant, this property accepts an array of
GUIDs.
tenantIds: 'your_tenant_id',Set the connectionString property to the primary connection string for your
instance of Azure Cosmos
DB.
connectionString: 'your_cosmos_db_primary_connection_string',Set the collectionPartition property to the name of the partition you chose
to contain your collection when setting up your instance of Azure Cosmos
DB.
cllectionPartition: 'your_cosmos_db_collection_partition_name',Set the collectionName property to the table name you chose when setting up
your instance of Azure Cosmos
DB.
collectionName: 'your_cosmos_db_table_name',Set the accessControlAllowOrigin property to your application's origin
value, which consists only of the scheme and fully qualified domain name of
your application's URL. For testing purposes, you can use a wildcard to set
this property. This will enable requests from any origin to access this
resource. Refer to the W3C documentation for
Access-Control-Allow-Origin
for more details. Use of a wildcard is not recommended for production
environments.
accessControlAllowOrigin: 'https://example.com',The default server port in this configuration is 3000. You may change this by
updating the serverPort property.
serverPort: 3000,By default, the Key Provider Server offers its APIs over HTTPS. You may wish
to disable this for testing purposes only. To use HTTP, set the useSSL
property to false. Using HTTPS is recommended for production
environments
useSsl: true,When using HTTPS, set the keyPath and certPath properties to configure the
server's private encryption key and certificate.
keyPath: `${__dirname}/privateKey.pem`,
certPath: `${__dirname}/publicCert.pem`,Set the keyPassphrase property to the passphrase used to protect your
private encryption key.
keyPassphrase: 'your_private_key_passphrase',Run yarn install in the Key Provider Server's application directory to
install the NPM packages needed to run this example.
Run node app.js in the Key Provider Server's application directory to run
the Key Provider server.
Use the Rich Chat example application configured for use with Azure Active Directory to exercise the Key Provider Server's APIs.
These examples are released as Open Source and licensed under the Apache 2.0 License.
If you find a issue in one of the Samples or have a Feature Request, simply file an issue.

