From cb11217c23a986acbf3edb44ddb2b13088dccd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Bara=C3=BAna?= Date: Tue, 4 Feb 2025 15:24:06 -0300 Subject: [PATCH] OIDC SSO docs (#2919) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: José Valim --- docs/authentication.md | 20 +++++++-- docs/images/auth_via_teams.png | Bin 0 -> 57013 bytes docs/images/auth_via_teams_old.png | Bin 0 -> 54841 bytes docs/teams/oidc_sso.md | 66 +++++++++++++++++++++++++++++ mix.exs | 1 + mix.lock | 6 +-- 6 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 docs/images/auth_via_teams.png create mode 100644 docs/images/auth_via_teams_old.png create mode 100644 docs/teams/oidc_sso.md diff --git a/docs/authentication.md b/docs/authentication.md index 866ed5592..ec2e3aaef 100644 --- a/docs/authentication.md +++ b/docs/authentication.md @@ -2,11 +2,23 @@ Livebook has three levels of authentication: - * Instance authentication: this authenticates the user on all routes of your Livebook instance, including deployed notebooks and the admin section. If you are deploying your Livebook instances with [Livebook Teams](https://livebook.dev/teams), all instances include Livebook Teams authentication by default. You can also manually configure your Livebook instance to have their own authentication, see the "Airgapped Authentication" section. + * **Instance authentication**: this authenticates the user on all routes of your Livebook instance, including deployed notebooks and the admin section. We provide a variety of authentication options here, including Single Sign On (SSO) and domain-based authentication via [Livebook Teams](https://livebook.dev/teams), as well as Zero Trust Authentication for airgapped environments. See the "Instance authentication" section for more information. - * Admin authentication: this authenticates access to Livebook admin interface, where users can create, write, and manage notebooks. Both password and token authentication are available. See the next section for more information. + * **Admin authentication**: this authenticates access to Livebook admin interface within an instance, where users can create, write, and manage notebooks. Both password and token authentication are available. See the ["Admin authentication"](#admin-authentication) section for more information. - * Deployed notebook passwords: additionally, when deploying notebooks as applications, each application may be password protected with a unique password. Only users authenticated as admin or with the password will be able to access them. + * **Deployed notebook passwords**: additionally, when deploying notebooks as applications, each application may be password protected with a unique password. Only users authenticated as admin or with the password will be able to access them. + +## Instance authentication + +When using [Livebook Teams](https://livebook.dev/teams), you can easily deploy instances of Livebook to run as application servers or as development servers. Those instances will, by default, use Livebook Teams to authenticate. The following authentication methods are supported by Livebook Teams: + +* **Livebook Teams account**: allow members of your Livebook Teams organization to authenticate using their Livebook Teams accounts. + +* **Email domain**: allow users to authenticate using email accounts from specific domains, such as your company’s Google Workspace domain. + +* **[OpenID Connect Single Sign-On (SSO)](/oidc_sso.html)**: Allow users to authenticate via an OpenID Connect Single Sign-On provider, such as Okta, Microsoft Entra or Keycloak. + +If your application servers must run in an airgapped environments and cannot reach out to Livebook Teams servers, we also provide a variety of options that can be configured directly in your Dockerfiles. See the "Airgapped Authentication" section in the sidebar. ## Admin authentication @@ -14,4 +26,4 @@ Livebook's default admin authentication method is token authentication. A token You may optionally enable password-based authentication by setting the environment variable `LIVEBOOK_PASSWORD` on startup or deployment. It must be at least 12 characters. -To disable authentication altogether, you may set the environment variable `LIVEBOOK_TOKEN_ENABLED` to `false`. +To disable admin authentication, you may set the environment variable `LIVEBOOK_TOKEN_ENABLED` to `false`. diff --git a/docs/images/auth_via_teams.png b/docs/images/auth_via_teams.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5badffdb762617302e7245eca797780f3295ef GIT binary patch literal 57013 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 U5Oy7z-Hu2V1x@+)vKAr#7ag)pnE(I) literal 0 HcmV?d00001 diff --git a/docs/images/auth_via_teams_old.png b/docs/images/auth_via_teams_old.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe13023364c68c689791e445a090abf62520682 GIT binary patch literal 54841 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 Iign2U0aP+JmH+?% literal 0 HcmV?d00001 diff --git a/docs/teams/oidc_sso.md b/docs/teams/oidc_sso.md new file mode 100644 index 000000000..65cdd2622 --- /dev/null +++ b/docs/teams/oidc_sso.md @@ -0,0 +1,66 @@ +# OIDC SSO (OpenID Connect Single Sign-On) + +Livebook Teams supports OpenID Connect (OIDC) Single Sign-On, allowing you to authenticate users through your existing Identity Provider (IdP) when they access your app servers and Livebook apps. + +![](images/auth_via_teams.png) + +## Demo + +Here's a quick demo of the feature working. + + + +## Configuration + +To integrate Livebook Teams with your OIDC SSO provider, follow these steps. + +### 1. Register with your OIDC Provider + +Go to your IdP admin, and register Livebook Teams as a Relying Party (client/app). This is the info you’ll need from Livebook Teams: + +- **Redirect URI**: The Livebook Teams sign-in callback URL that must be registered with your IdP: ` https://teams.livebook.dev/identity/callbacks/oidc` +- **Required OIDC scopes**: the OIDC scopes Livebook Teams requires: `openid`, `profile`, `email`, `offline_access` + +Once that’s done, you should retrieve the following information from the registration process: + +- **Client ID**: A unique identifier assigned to Livebook Teams by your IdP. +- **Client Secret**: A confidential key assigned to Livebook Teams by your IdP. +- **Discovery URL**: This is the OIDC metadata URL provided by your IdP. Usual format: `https://YOUR_IDP/.well-known/openid-configuration` + +### 2. Configure OIDC in Livebook Teams + + + +1. Log in to Livebook Teams +2. Go to the **Authentication** panel +3. Click **Add OIDC SSO** and provide the following details: + - **Name**: A display name for your OIDC provider (e.g., Okta, Microsoft Entra, Keycloak). + - **Discovery URL**: Use the discovery URL retrieved from your IdP. + - **Client ID**: Use the Client ID retrieved from your IdP. + - **Client Secret**: Use the Client Secret retrieved from your IdP. + - **Enable this SSO provider**: Make sure this option is enabled. +4. Save + +### 3. Configure your deployment group to authenticate via Livebook Teams + +To enable OIDC authentication, your deployment group must be configured to use authentication via Livebook Teams. + + + +In order to do so, follow these steps: + +1. Log in to Livebook Teams. +2. Navigate to the **Deployments** panel. +3. Click **Edit** on the deployment group where you want to enable authentication. +4. Ensure that **Authenticate via Livebook Teams** is enabled. +5. Save your changes. + +### Test the integration with your OIDC IdP + +To verify the integration is working, follow these steps: + +1. Navigate to an application deployed in a deployment group configured for OIDC authentication. +2. The app server will redirect you to Livebook Teams for authentication. +3. On the authentication page, you will see an option to sign in using your configured OIDC provider. +4. Click the name of your OIDC SSO configuration and follow the authentication steps provided by your IdP. +5. Once authentication is complete, the IdP will redirect you back to your app server, and you will be successfully signed in. diff --git a/mix.exs b/mix.exs index 6b0ad5895..b9c4301e0 100644 --- a/mix.exs +++ b/mix.exs @@ -256,6 +256,7 @@ defmodule Livebook.MixProject do "docs/teams/intro_to_teams.md", "docs/teams/shared_secrets.md", "docs/teams/shared_file_storages.md", + {"docs/teams/oidc_sso.md", title: "OIDC SSO"}, "docs/authentication/basic_auth.md", "docs/authentication/cloudflare.md", "docs/authentication/google_iap.md", diff --git a/mix.lock b/mix.lock index 5a112a5c3..cb54a89b7 100644 --- a/mix.lock +++ b/mix.lock @@ -23,13 +23,13 @@ "jsx": {:hex, :jsx, "3.1.0", "d12516baa0bb23a59bb35dccaf02a1bd08243fcbb9efe24f2d9d056ccff71268", [:rebar3], [], "hexpm", "0c5cc8fdc11b53cc25cf65ac6705ad39e54ecc56d1c22e4adb8f5a53fb9427f3"}, "kubereq": {:hex, :kubereq, "0.3.2", "e425dd94bd74b6510dc45a9557d9378d3fd6ca0ea3ebe0dad2a9c85a08c2e20a", [:mix], [{:fresh, "~> 0.4.4", [hex: :fresh, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: false]}, {:mint_web_socket, "~> 1.0", [hex: :mint_web_socket, repo: "hexpm", optional: false]}, {:pluggable, "~> 1.0", [hex: :pluggable, repo: "hexpm", optional: false]}, {:req, "~> 0.5.0", [hex: :req, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.0", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "d13293ac66bbfe7ac238881ac0404662af5a01f96f9325dd556594fd858f2a3e"}, "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, - "makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"}, + "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, + "makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, "mint": {:hex, :mint, "1.6.2", "af6d97a4051eee4f05b5500671d47c3a67dac7386045d87a904126fd4bbcea2e", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "5ee441dffc1892f1ae59127f74afe8fd82fda6587794278d924e4d90ea3d63f9"}, "mint_web_socket": {:hex, :mint_web_socket, "1.0.4", "0b539116dbb3d3f861cdf5e15e269a933cb501c113a14db7001a3157d96ffafd", [:mix], [{:mint, ">= 1.4.1 and < 2.0.0-0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "027d4c5529c45a4ba0ce27a01c0f35f284a5468519c045ca15f43decb360a991"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, "phoenix": {:hex, :phoenix, "1.7.18", "5310c21443514be44ed93c422e15870aef254cf1b3619e4f91538e7529d2b2e4", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1797fcc82108442a66f2c77a643a62980f342bfeb63d6c9a515ab8294870004e"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.3", "f686701b0499a07f2e3b122d84d52ff8a31f5def386e03706c916f6feddf69ef", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "909502956916a657a197f94cc1206d9a65247538de8a5e186f7537c895d95764"},