Dynamic cube config providers PivotData Microservice Documentation
appsettings.json
file PivotDataService:CubeProviders
section.
Very often data sources are not 'static' for all users and cannot be hardcoded in the appsettings.json
file:
- if your app is SaaS and each user has access only to his database (or table filtered by user's records)
- cubes configuration are user-specific because of access control rules
- data sources are configured by end-user in your main web app
In these cases cubes configuration can be provided to PivotData microservice dynamically by the main web application. Technically you can specify an URL and microservice will use it to load JSON configuration of cubes:
"PivotDataService": { "CubeProviders": [ { "Url": "http://localhost/mainapp/getschema?access_token=test123456789abc", "ForwardHeaders": ["Cookie"] } ] }
This URL should return a JSON with an array of cubes, for example:
[{ "Id": "accounts-elasticsearch", "Name": "Accounts from ElasticSearch sample dataset", "SourceType": "elasticsearch", "SourceElasticSearch": { "ConnectionUrl": "https://site:nxxr8qt7n26c7jwijhwg1ipnarf402yn@thorin-us-east-1.searchly.com", "Index": "bank" }, "InferSchema": true }]
Secure cube provider URL
There are 3 ways how you can secure an URL that provides cubes to PivotData microservice:
- simple: check some secret token (smth like
access_token
) passed as URL parameter; allow to access cube provider URL only from the server where microservice is hosted - cookie-based: if microservice API is accessed from client-side on the same domain as main web app you can specify
"ForwardHeaders": ["Cookie"]
to forward cookies in a request to the cube provider URL. As result cube provider URL may use auth cookie as other URLs of your web app. - JWT-based (recommended): if microservice API is secured with Json Web Token you can specify
"ForwardHeaders":["Authorization"]
to forward JWT in a request to the cube provider URL. In the code that handles this request you may verify JWT signature and use payload data (claims) to get user's ID and other context that may be provided in JWT.
You can combine these approaches: say, (1) and (3) to guarantee that cube provider URL cannot be accessed from a web browser.
Integration Example
PivotData microservice package includes integration example of main web app (ASP.NET MVC Core), it is located in integration\AspNetMvcCore
folder.
To run it please follow steps from readme.txt
.
- cube provider URL is defined in
pivotdataservice\appsettings.json
. URL is secured in a simple way (withaccess_token
parameter; user's context is passed with URL parameters (resolved from JWT claims). - code that handles cube provider URL:
Controllers\HomeController.cs
(GetCubeSchema method)