Skip to content

Configuration

IntensiveReports reads its configuration from appsettings.json in the site folder. The release package contains appsettings.template.json with every key below; copy it to the site folder as appsettings.json and fill it in.

After a change, restart the app: recycle the app pool, or save web.config in the site folder unchanged (IIS restarts the app when that file changes). A restart empties the in-memory data (Data and cache).

{
"EntraID": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "<directory-tenant-id>",
"ClientId": "<application-client-id>",
"ClientSecret": "<client-secret-value>",
"CallbackPath": "/signin-oidc",
"Domain": "<your-primary-domain>"
},
"MsGraphCredentials": {
"TenantId": "<directory-tenant-id>",
"ClientId": "<application-client-id>",
"ClientSecret": "<client-secret-value>",
"TenantDomain": "<tenant>.onmicrosoft.com",
"CertificateThumbprint": "<certificate-thumbprint>",
"SparePointSite": "https://<tenant>-admin.sharepoint.com"
},
"IntensiveReportsConfig": {
"LoggingRootPath": "C:\\IntensiveReportsLogs\\",
"Access": { "RequireSignIn": true, "ReaderRoles": "" },
"DashboardAdminRole": "IR.Admin",
"Security": { "Csp": "Enforce", "ErrorDetails": "SignedIn" },
"Api": {
"PublicUrl": "https://<your-host>",
"RequestsPerMinute": 120,
"AnonymousRequestsPerMinute": 20,
"Entra": { "ApiAppId": "", "TenantId": "", "AccessRole": "IR.Api.Access" }
},
"PowerShellTimeoutMinutes": 20,
"DocsUrl": "https://docs.intensivereports.com"
},
"Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } },
"AllowedHosts": "<your-host>"
}

Replace every value in angle brackets. Backslashes in paths are written twice (C:\\IntensiveReportsLogs\\).

Both sections name the same app registration (Entra app registration).

KeyRequiredValue
MsGraphCredentials:TenantIdyesthe Directory (tenant) ID (a GUID). This is the tenant whose data the app shows.
MsGraphCredentials:ClientIdyesthe Application (client) ID
MsGraphCredentials:ClientSecretyesthe client secret value
MsGraphCredentials:CertificateThumbprintyesthe thumbprint of the certificate in LocalMachine\My
MsGraphCredentials:TenantDomainyesyour <tenant>.onmicrosoft.com domain (used by Exchange Online, Purview and SharePoint PowerShell)
MsGraphCredentials:SparePointSiteyesyour SharePoint admin address, https://<tenant>-admin.sharepoint.com. The key is spelled SparePoint.
EntraID:Instanceyeshttps://login.microsoftonline.com/
EntraID:TenantIdyesthe tenant ID. If you leave it empty or write organizations or common, the app uses MsGraphCredentials:TenantId. Sign-in is always limited to that tenant.
EntraID:ClientIdyesthe same application (client) ID
EntraID:ClientSecretyesthe same client secret value
EntraID:CallbackPathyes/signin-oidc
EntraID:Domainnoyour primary domain (for information)
KeyDefaultMeaning
AllowedHosts* (any host)the host name(s) people use to open the app, separated by ;, for example reports.example.com. Requests for other host names are refused. With *, the app logs a warning at start and refuses certificate API clients unless Api:PublicUrl is set.
IntensiveReportsConfig:Access:RequireSignInfalsetrue: every page needs a signed-in user of your tenant. Set it to true for every real tenant. See Sign-in and access.
IntensiveReportsConfig:Access:ReaderRolesemptyapp roles, separated by commas, of which a user needs one to open the app. Empty: every user of your tenant.
IntensiveReportsConfig:DashboardAdminRoleIR.Adminthe app role of IntensiveReports administrators. Global Administrators always qualify.
IntensiveReportsConfig:Security:CspEnforcethe Content Security Policy: Enforce, ReportOnly (browsers only report violations) or Off. The other security headers are always sent.
IntensiveReportsConfig:Security:ErrorDetailsSignedInSignedIn: full error texts only for signed-in users of your tenant; everyone else sees a short reference that is written to the log with the full text. Everyone: full texts for all.

These only matter once you switch the API on (Report API and MCP).

KeyDefaultMeaning
IntensiveReportsConfig:Api:PublicUrlemptythis site’s public address, for example https://reports.example.com; several separated by ;. Certificate API clients must name it as the token audience, and MCP clients that sign in with Entra ID find the sign-in through it. Empty: the address of the request, but only when AllowedHosts names the host.
IntensiveReportsConfig:Api:RequestsPerMinute120requests a minute per API or MCP client
IntensiveReportsConfig:Api:AnonymousRequestsPerMinute20requests a minute per address without a valid token
IntensiveReportsConfig:Api:Entra:ApiAppIdemptythe application ID of the IntensiveReports API app registration. Set it to let API and MCP clients sign in with Entra ID. Empty: Entra sign-in for the API is off.
IntensiveReportsConfig:Api:Entra:TenantIdthe data tenantthe tenant of that app registration
IntensiveReportsConfig:Api:Entra:AccessRoleIR.Api.Accessthe app role a caller needs
KeyDefaultMeaning
IntensiveReportsConfig:LoggingRootPathC:\IntensiveReportsLogs\the log folder. The app writes IntensiveReports<date>.txt, one file a day (a new file after 100 MB), and keeps 31 files.
Serilognoneoptional: a standard Serilog section to change log levels or add log targets
IntensiveReportsConfig:SettingsFilePathApp_Data\IntensiveReports.settings.jsonwhere the settings made in the app are stored. The API clients and the API audit log are stored next to it.
IntensiveReportsConfig:HistoryFilePathApp_Data\IntensiveReports.history.jsonwhere the dashboard history is stored
IntensiveReportsConfig:PowerShellTimeoutMinutes20a PowerShell report is stopped after this many minutes (1 to 120)
IntensiveReportsConfig:RunspacePoolSize:GraphRunspacePoolService1parallel PowerShell sessions for Graph PowerShell (1 to 8)
IntensiveReportsConfig:RunspacePoolSize:ExoGraphRunspacePoolService3parallel PowerShell sessions for Exchange Online (1 to 8)
IntensiveReportsConfig:DeviceNamePatternnonethe device naming convention (a regular expression) when none is set in Settings > Report thresholds; the setting in the app wins
KeyDefaultMeaning
IntensiveReportsConfig:DocsUrlhttps://docs.intensivereports.comthe address of this documentation. The ? window of every report links to the report’s page here. Set your own address if you host a copy; set it to an empty value to hide the link.

ConnectionStrings:DefaultConnection is not needed. IntensiveReports stores nothing in a database; leave the key out.

Most day-to-day settings are made in the app on the Settings page, not in appsettings.json:

TabWhoWhat
Display, Regional & language, Export, Navigationeach user (“Only you”); on Display, administrators also set the Company default layout styletheme, language, date and number formats, table size, export options, menu
Report thresholdsadministratorsthe limits reports use, for example days without sign-in before a user counts as inactive. Each shows its default, allowed range and the reports that use it.
Data & cacheadministratorsrefresh pace, pausing background refresh, switching data sources off, how long on-demand reports are kept. See Data and cache.
API accessadministratorsthe report API and MCP server and their clients. See Report API and MCP.

Settings marked Only you are stored in the user’s browser and apply at once. Settings marked Everyone apply to every user and change only when an administrator presses Save. They are stored in App_Data (Overview). Below the tabs, administrators can reset all settings to their defaults or restore the previous settings.