Skip to content

Commit cfc24f3

Browse files
committed
improvement(settings): document organization security settings
1 parent 0cdcc40 commit cfc24f3

8 files changed

Lines changed: 41 additions & 5 deletions

File tree

apps/docs/content/docs/platform/enterprise/index.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Sim Enterprise adds organization controls for access, provisioning, operations,
1111
| [Single sign-on](/platform/enterprise/sso) | Connect a SAML or OIDC identity provider |
1212
| [Verified domains](/platform/enterprise/verified-domains) | Prove domain ownership for SSO and provisioning |
1313
| [Directory provisioning](/platform/enterprise/scim) | Sync users and group-based access from your directory |
14+
| [Security](/platform/enterprise/security) | Manage session policies and view configured outbound IP addresses |
1415
| [Session policies](/platform/enterprise/session-policies) | Set session lifetimes and revoke member sessions |
1516
| [Audit logs](/platform/enterprise/audit-logs) | Investigate configuration and security events |
1617
| [Usage tracking](/platform/enterprise/usage-tracking) | Review usage by member, workspace, model, and source |

apps/docs/content/docs/platform/enterprise/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"sso",
66
"scim",
77
"verified-domains",
8+
"security",
89
"session-policies",
910
"access-control",
1011
"custom-blocks",
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
title: Security
3+
description: Manage organization session policies and view configured outbound IP addresses
4+
---
5+
6+
import { Callout } from 'fumadocs-ui/components/callout'
7+
8+
Organization owners and admins open **Settings → Security** to manage session policies and view outbound IP addresses. [Single sign-on](/platform/enterprise/sso) remains a separate settings page for identity providers, verified domains, and provisioning.
9+
10+
## Session policies
11+
12+
Set **Max session lifetime** and **Idle timeout** in hours, then select **Save**. Leave either field empty to use its default behavior. **Discard** restores your saved values.
13+
14+
**Sign out all members** opens a confirmation before revoking the organization's browser sessions, except your current session. It does not revoke API keys.
15+
16+
See [Session policies](/platform/enterprise/session-policies) for limits, defaults, and how changes affect existing sessions.
17+
18+
## Outbound IP addresses
19+
20+
When an outbound gateway has been configured for your organization, this section lists the IPv4 addresses published by your deployment administrator. Use the copy button beside each address to copy it in `/32` format. Allowlist **every listed address** on the destination firewall.
21+
22+
This section is read-only. Viewing or copying addresses does not provision a gateway or change routing. Contact Sim support for hosted deployments, or your deployment administrator for self-hosted installations, to arrange routing and confirm which connections it covers.
23+
24+
If dedicated IPs are not configured, the page says so. If settings cannot be loaded, use **Try again**. A paused-routing message means your administrator has blocked outbound routing.
25+
26+
<Callout type="warn">
27+
The listed addresses describe configured routing, not a successful connectivity test. Verify each required connection from both Sim and its background jobs before relying on the allowlist. Browser traffic and traffic originating inside external services do not use this gateway. The current mandatory-gateway mode also blocks unsupported transports, including remote sandbox creation and raw database connections; it does not silently send them through another network.
28+
</Callout>
29+
30+
## Availability
31+
32+
On Sim Cloud, Security settings require an Enterprise organization and an owner or admin role. On self-hosted deployments, the outbound IP section is available to organization administrators; session controls appear only when session policies are enabled. See [self-hosted enterprise configuration](/platform/enterprise/self-hosted).
33+
34+
Existing links to the former **Session policies** and **Network** pages continue to open Security settings.

apps/docs/content/docs/platform/enterprise/session-policies.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Session Policies let organization owners and admins on Enterprise plans control
1111

1212
## Setup
1313

14-
Go to **Settings → Organization → Session policies** in your organization settings.
14+
Go to **Settings → Security → Session policies** in your organization settings. The [Security page](/platform/enterprise/security) also shows configured outbound IP addresses; single sign-on remains a separate page.
1515

1616
Both limits are optional. Leave a field empty to keep the default behavior: sessions last 30 days and extend automatically while a member stays active.
1717

apps/docs/content/docs/search/gitlab.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Use a self-managed GitLab instance reachable by Sim over HTTPS. The administrato
2525

2626
The CSV path checks the token's identity and project access. It does not require administrator directory access or a custom admin role.
2727

28+
If your GitLab instance restricts inbound traffic by source IP, coordinate the allowlist before connecting. When dedicated routing is configured, organization admins can copy its published addresses from [Settings → Security → Outbound IP addresses](/platform/enterprise/security#outbound-ip-addresses). Confirm access from both the application and background sync jobs; seeing the addresses in Settings does not verify connectivity.
29+
2830
<Callout type="warn">
2931
CSV files define access in Sim. Each mapped user listed for the selected project can read all of that source's indexed, non-confidential content. Sim does not infer that user's GitLab role or feature restrictions in this path. Include only users who should have that access, and replace the files whenever memberships or email mappings change.
3032
</Callout>

apps/sim/components/settings/navigation.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,7 @@ export const SETTINGS_SECTION_REGISTRY: readonly SettingsSectionRegistryEntry[]
702702
{
703703
label: 'Security',
704704
icon: Lock,
705+
docsLink: 'https://docs.sim.ai/platform/enterprise/security',
705706
unified: {
706707
id: 'security',
707708
description: 'Manage session policies and view outbound IP addresses.',

apps/sim/lib/copilot/generated/docs-manifest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ export const DOCS_MANIFEST: readonly string[] = [
383383
'platform/enterprise/scim.mdx',
384384
'platform/enterprise/scim/entra.mdx',
385385
'platform/enterprise/scim/okta.mdx',
386+
'platform/enterprise/security.mdx',
386387
'platform/enterprise/self-hosted.mdx',
387388
'platform/enterprise/session-policies.mdx',
388389
'platform/enterprise/sso.mdx',

apps/sim/lib/oauth/refresh-token.server.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -640,21 +640,17 @@ function buildAuthRequest(
640640
grant_type: 'refresh_token',
641641
}
642642

643-
// Handle refresh token placement
644643
if (config.refreshTokenInAuthHeader) {
645644
// Cal.com style: refresh token in Authorization header as Bearer token
646645
headers.Authorization = `Bearer ${refreshToken}`
647646
} else {
648-
// Standard OAuth: refresh token in request body
649647
bodyParams.refresh_token = refreshToken
650648
}
651649

652650
if (config.useBasicAuth) {
653-
// Use Basic Authentication - credentials in Authorization header only
654651
const basicAuth = Buffer.from(`${config.clientId}:${config.clientSecret}`).toString('base64')
655652
headers.Authorization = `Basic ${basicAuth}`
656653
} else {
657-
// Use body credentials - include client credentials in request body
658654
bodyParams[config.clientIdParamName || 'client_id'] = config.clientId
659655
if (config.clientSecret) {
660656
bodyParams.client_secret = config.clientSecret

0 commit comments

Comments
 (0)