From 4fc71695f806d04ce073f1033049be1cdf7ab9f3 Mon Sep 17 00:00:00 2001 From: Muji Sayed Date: Fri, 17 Feb 2023 15:40:15 +0000 Subject: [PATCH] add azure sso setup guide (#31) --- .../self-hosted/available-integrations.md | 5 +- .../self-hosted/azure-sso.md | 88 ++++++++++++++++++ .../self-hosted/azure_api_scope.png | Bin 0 -> 35202 bytes 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 docs/integrations/identity-providers/self-hosted/azure-sso.md create mode 100755 static/img/integrations/identity-providers/self-hosted/azure_api_scope.png diff --git a/docs/integrations/identity-providers/self-hosted/available-integrations.md b/docs/integrations/identity-providers/self-hosted/available-integrations.md index d9a30adc..9baec117 100644 --- a/docs/integrations/identity-providers/self-hosted/available-integrations.md +++ b/docs/integrations/identity-providers/self-hosted/available-integrations.md @@ -4,7 +4,7 @@ title: Available IDP Integrations sidebar_position: 1 --- -There are a few Identity Provider options that you can choose to run a self-hosted version NetBird. +There are a few Identity Provider options that you can choose to run a self-hosted version NetBird. :::tip OpenID NetBird supports generic OpenID (OIDC) protocol allowing for the integration with any IDP that follows the specification. @@ -12,4 +12,5 @@ NetBird supports generic OpenID (OIDC) protocol allowing for the integration wit List of available guides: - [Auth0](/integrations/identity-providers/self-hosted/using-netbird-with-auth0) (managed service) -- [Keycloak](/integrations/identity-providers/self-hosted/using-netbird-with-keycloak) \ No newline at end of file +- [Keycloak](/integrations/identity-providers/self-hosted/using-netbird-with-keycloak) +- [Azure SSO](/integrations/identity-providers/self-hosted/using-netbird-with-Azure-SSO) diff --git a/docs/integrations/identity-providers/self-hosted/azure-sso.md b/docs/integrations/identity-providers/self-hosted/azure-sso.md new file mode 100644 index 00000000..6a2edae4 --- /dev/null +++ b/docs/integrations/identity-providers/self-hosted/azure-sso.md @@ -0,0 +1,88 @@ +--- +id: using-netbird-with-azure-sso +title: Using NetBird with Azure SSO +sidebar_position: 4 +tags: +- integrations +- idp +- azure +- oidc +- how-to +--- + +This guide is a part of the [NetBird Self-hosting Guide](/getting-started/self-hosting) and explains how to integrate +**self-hosted** NetBird with [Azure SSO](https://azure.microsoft.com/en-us/solutions/active-directory-sso/#overview). + +This is an organized collection of instructions gathered from the [Netbird Slack](https://netbirdio.slack.com/) + +There are five properties of the **`setup.env`** file that we will configure in this guide: +- `NETBIRD_AUTH_CLIENT_ID` +- `NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT` +- `NETBIRD_USE_AUTH0` +- `NETBIRD_AUTH_AUDIENCE` +- `NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID` +- `NETBIRD_AUTH_DEVICE_AUTH_PROVIDER` +- `NETBIRD_AUTH_REDIRECT_URI` +- `NETBIRD_AUTH_SILENT_REDIRECT_URI` + + +In Azure, Navigate to **Azure Active Directory**, and click on **App Registrations** in the left hand menu. Once there, Click on **New registration** across the top menu bar. +- Write a name for your application and choose who can access your application. +- For Redirect URI, Choose Single-page Application(SPA). for the next box, type your netbird.domainname + auth. E.g `https://netbird.mydomainname.com/auth`. Keep the `auth` in mind as this will be your value for `NETBIRD_AUTH_REDIRECT_URI` +- On this next page, copy the `Application (client) ID`. This will be the value for the following: + - `NETBIRD_AUTH_AUDIENCE` + - `NETBIRD_AUTH_CLIENT_ID` + - `NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID` + + +### 1. Authentication +Within the same section (App Registrations), navigate to **Authentication** via the left hand menu. Once there, perform the following: +- Under the Single-page Application Section, Add another URI with the following value: `https://yournetbirddomain.com/silent-auth`. The `silent-auth` section of the url is the value for `NETBIRD_AUTH_SILENT_REDIRECT_URI` +- You should have two URI's listed similar to these: + - `https://yournetbirddomain.com/auth` + - `https://yournetbirddomain.com/silent-auth` +- Scroll down and check off the following two boxes: + - `Access tokens (used for implicit flows)` + - `ID tokens (used for implicit and hybrid flows)` + + +### 2. Expose API +Next, on the left hand menu, click on **Expose an API**. Next, set an `Application ID URI`. You can choose the default value as is, or set your own. Click on **Add a Scope**, and enter the following: +- **Scope Name:** `api` +- The rest you can choose as your work requires it. + +Next under **Authorized client Applications**, click on **add a client application** and enter the following: +- **Client ID**: This is the same as your Application ID URI minus the `api://`. See the picture below as a reference +- **Authorized Scopes:** The correct scope will contain your **Client ID** used in the above step. The correct Authorized Scope will be similar to `api://YOUR_CLIENT_ID/api` (api is the value of the name of the scope we defined before.) + +![](/img/integrations/identity-providers/self-hosted/azure_api_scope.png) + + +### 3. API permissions +Under **API Permissions**, click on **Add a permission**. On the next screen that pops up, click on **My APIs**, and select the API that matches with your **Application Client ID**. Next Select the scope we created in the earlier steps. + +### 4. Manifest +On the left hand Menu, click on **Manifest**. On the next page, search for `accessTokenAcceptedVersion` and change the value from `null` to `2`. + +### 5. Continue with the self-hosting guide +Your authority OIDC configuration will be available under: +``` +https://login.microsoftonline.com/YOUR-DIRECTORY(TENANT)-ID/v2.0/.well-known/openid-configuration +``` +:::caution +Double-check if the endpoint returns a JSON response by calling it from your browser. +::: + +- Set properties in the `setup.env` file: + - NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT=`https://login.microsoftonline.com/YOUR-DIRECTORY(TENANT)-ID/v2.0/.well-known/openid-configuration` + - this can be grabbed by clicking on `Endpoints` in your App's **App Registration* Over Page. + - NETBIRD_AUTH_CLIENT_ID=**YOUR APPLICATION (client) ID** + - This can be grabbed from your App's **App Registration** Overview page + - NETBIRD_AUTH_AUDIENCE=**YOUR APPLICATION (client) ID** + - NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID=**YOUR Application (client) ID**. Optional, + - NETBIRD_USE_AUTH0=`false` + - NETBIRD_AUTH_DEVICE_AUTH_PROVIDER=`hosted` + - NETBIRD_AUTH_REDIRECT_URI=`/auth` + - NETBIRD_AUTH_SILENT_REDIRECT_URI=`/silent-auth` +- You can now continue with the [NetBird Self-hosting Guide](/getting-started/self-hosting#step-3-configure-identity-provider). + diff --git a/static/img/integrations/identity-providers/self-hosted/azure_api_scope.png b/static/img/integrations/identity-providers/self-hosted/azure_api_scope.png new file mode 100755 index 0000000000000000000000000000000000000000..c77feacea79a6ab5bf61f438a28f602251ba6675 GIT binary patch literal 35202 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 literal 0 HcmV?d00001