Skip to content

Commit eb0a85c

Browse files
msukkariclaude
andcommitted
feat: add JumpCloud as identity provider for SSO
Adds support for JumpCloud as an OIDC identity provider, enabling SSO authentication. Includes schema definition, SSO provider registration, UI components, analytics tracking, logo, and documentation. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 1ce1ec8 commit eb0a85c

File tree

13 files changed

+1071
-1
lines changed

13 files changed

+1071
-1
lines changed

docs/docs/configuration/idp.mdx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,4 +520,51 @@ An Authentik connection can be used for [authentication](/docs/configuration/aut
520520
</Steps>
521521
</Accordion>
522522

523+
### JumpCloud
524+
525+
A JumpCloud connection can be used for [authentication](/docs/configuration/auth). JumpCloud supports OIDC (OpenID Connect), which Sourcebot uses to authenticate users.
526+
527+
<Accordion title="instructions">
528+
<Steps>
529+
<Step title="Create an SSO Application in JumpCloud">
530+
To begin, you must create an SSO application in JumpCloud to facilitate the identity provider connection. For more information, see the [JumpCloud OIDC documentation](https://jumpcloud.com/support/sso-with-oidc).
531+
532+
When configuring your application:
533+
- Set the SSO type to "OIDC"
534+
- Add `<sourcebot_url>/api/auth/callback/jumpcloud` to the redirect URIs (ex. https://sourcebot.coolcorp.com/api/auth/callback/jumpcloud)
535+
- Set the login URL to `<sourcebot_url>/login`
536+
537+
After creating the application, note the `CLIENT_ID` and `CLIENT_SECRET`. The issuer URL is typically `https://oauth.id.jumpcloud.com`.
538+
</Step>
539+
<Step title="Define environment variables">
540+
The client id, secret, and issuer URL are provided to Sourcebot via environment variables. These can be named whatever you like
541+
(ex. `JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_ID`, `JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_SECRET`, and `JUMPCLOUD_IDENTITY_PROVIDER_ISSUER`)
542+
</Step>
543+
<Step title="Define the identity provider config">
544+
Create a `identityProvider` object in the [config file](/docs/configuration/config-file) with the following fields:
545+
546+
```json wrap icon="code"
547+
{
548+
"$schema": "https://raw.githubusercontent.com/sourcebot-dev/sourcebot/main/schemas/v3/index.json",
549+
"identityProviders": [
550+
{
551+
"provider": "jumpcloud",
552+
"purpose": "sso",
553+
"clientId": {
554+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_ID"
555+
},
556+
"clientSecret": {
557+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_CLIENT_SECRET"
558+
},
559+
"issuer": {
560+
"env": "JUMPCLOUD_IDENTITY_PROVIDER_ISSUER"
561+
}
562+
}
563+
]
564+
}
565+
```
566+
</Step>
567+
</Steps>
568+
</Accordion>
569+
523570

docs/snippets/schemas/v3/identityProvider.schema.mdx

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,115 @@
842842
"issuer"
843843
]
844844
},
845+
"JumpCloudIdentityProviderConfig": {
846+
"type": "object",
847+
"additionalProperties": false,
848+
"properties": {
849+
"provider": {
850+
"const": "jumpcloud"
851+
},
852+
"purpose": {
853+
"const": "sso"
854+
},
855+
"clientId": {
856+
"anyOf": [
857+
{
858+
"type": "object",
859+
"properties": {
860+
"env": {
861+
"type": "string",
862+
"description": "The name of the environment variable that contains the token."
863+
}
864+
},
865+
"required": [
866+
"env"
867+
],
868+
"additionalProperties": false
869+
},
870+
{
871+
"type": "object",
872+
"properties": {
873+
"googleCloudSecret": {
874+
"type": "string",
875+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
876+
}
877+
},
878+
"required": [
879+
"googleCloudSecret"
880+
],
881+
"additionalProperties": false
882+
}
883+
]
884+
},
885+
"clientSecret": {
886+
"anyOf": [
887+
{
888+
"type": "object",
889+
"properties": {
890+
"env": {
891+
"type": "string",
892+
"description": "The name of the environment variable that contains the token."
893+
}
894+
},
895+
"required": [
896+
"env"
897+
],
898+
"additionalProperties": false
899+
},
900+
{
901+
"type": "object",
902+
"properties": {
903+
"googleCloudSecret": {
904+
"type": "string",
905+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
906+
}
907+
},
908+
"required": [
909+
"googleCloudSecret"
910+
],
911+
"additionalProperties": false
912+
}
913+
]
914+
},
915+
"issuer": {
916+
"anyOf": [
917+
{
918+
"type": "object",
919+
"properties": {
920+
"env": {
921+
"type": "string",
922+
"description": "The name of the environment variable that contains the token."
923+
}
924+
},
925+
"required": [
926+
"env"
927+
],
928+
"additionalProperties": false
929+
},
930+
{
931+
"type": "object",
932+
"properties": {
933+
"googleCloudSecret": {
934+
"type": "string",
935+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
936+
}
937+
},
938+
"required": [
939+
"googleCloudSecret"
940+
],
941+
"additionalProperties": false
942+
}
943+
]
944+
}
945+
},
946+
"required": [
947+
"provider",
948+
"purpose",
949+
"clientId",
950+
"clientSecret",
951+
"issuer"
952+
]
953+
},
845954
"BitbucketServerIdentityProviderConfig": {
846955
"type": "object",
847956
"additionalProperties": false,
@@ -1776,6 +1885,115 @@
17761885
"clientSecret"
17771886
]
17781887
},
1888+
{
1889+
"type": "object",
1890+
"additionalProperties": false,
1891+
"properties": {
1892+
"provider": {
1893+
"const": "jumpcloud"
1894+
},
1895+
"purpose": {
1896+
"const": "sso"
1897+
},
1898+
"clientId": {
1899+
"anyOf": [
1900+
{
1901+
"type": "object",
1902+
"properties": {
1903+
"env": {
1904+
"type": "string",
1905+
"description": "The name of the environment variable that contains the token."
1906+
}
1907+
},
1908+
"required": [
1909+
"env"
1910+
],
1911+
"additionalProperties": false
1912+
},
1913+
{
1914+
"type": "object",
1915+
"properties": {
1916+
"googleCloudSecret": {
1917+
"type": "string",
1918+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1919+
}
1920+
},
1921+
"required": [
1922+
"googleCloudSecret"
1923+
],
1924+
"additionalProperties": false
1925+
}
1926+
]
1927+
},
1928+
"clientSecret": {
1929+
"anyOf": [
1930+
{
1931+
"type": "object",
1932+
"properties": {
1933+
"env": {
1934+
"type": "string",
1935+
"description": "The name of the environment variable that contains the token."
1936+
}
1937+
},
1938+
"required": [
1939+
"env"
1940+
],
1941+
"additionalProperties": false
1942+
},
1943+
{
1944+
"type": "object",
1945+
"properties": {
1946+
"googleCloudSecret": {
1947+
"type": "string",
1948+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1949+
}
1950+
},
1951+
"required": [
1952+
"googleCloudSecret"
1953+
],
1954+
"additionalProperties": false
1955+
}
1956+
]
1957+
},
1958+
"issuer": {
1959+
"anyOf": [
1960+
{
1961+
"type": "object",
1962+
"properties": {
1963+
"env": {
1964+
"type": "string",
1965+
"description": "The name of the environment variable that contains the token."
1966+
}
1967+
},
1968+
"required": [
1969+
"env"
1970+
],
1971+
"additionalProperties": false
1972+
},
1973+
{
1974+
"type": "object",
1975+
"properties": {
1976+
"googleCloudSecret": {
1977+
"type": "string",
1978+
"description": "The resource name of a Google Cloud secret. Must be in the format `projects/<project-id>/secrets/<secret-name>/versions/<version-id>`. See https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets"
1979+
}
1980+
},
1981+
"required": [
1982+
"googleCloudSecret"
1983+
],
1984+
"additionalProperties": false
1985+
}
1986+
]
1987+
}
1988+
},
1989+
"required": [
1990+
"provider",
1991+
"purpose",
1992+
"clientId",
1993+
"clientSecret",
1994+
"issuer"
1995+
]
1996+
},
17791997
{
17801998
"type": "object",
17811999
"additionalProperties": false,

0 commit comments

Comments
 (0)