From 8a1ed62d934ca7575e9d23da70801ebd9fde3fca Mon Sep 17 00:00:00 2001 From: Yordan Mitev Date: Tue, 9 Sep 2025 10:13:40 +0300 Subject: [PATCH 1/6] Replace password with API key authentication for NuGet --- _contentTemplates/common/nuget.md | 20 ++++++++---------- .../images/account-generate-nuget-api-key.png | Bin 0 -> 9988 bytes installation/images/manage-nuget-keys.png | Bin 18473 -> 0 bytes installation/images/vs-nuget-auth-window.png | Bin 0 -> 8466 bytes installation/nuget/nuget-config.md | 13 ++---------- installation/nuget/nuget-keys.md | 17 +++++---------- installation/nuget/visual-studio.md | 15 +++++++++---- 7 files changed, 27 insertions(+), 38 deletions(-) create mode 100644 installation/images/account-generate-nuget-api-key.png delete mode 100644 installation/images/manage-nuget-keys.png create mode 100644 installation/images/vs-nuget-auth-window.png diff --git a/_contentTemplates/common/nuget.md b/_contentTemplates/common/nuget.md index ed7bbe08d..97d0e5933 100644 --- a/_contentTemplates/common/nuget.md +++ b/_contentTemplates/common/nuget.md @@ -17,19 +17,17 @@ Visit status.telerik.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 SKkUDoH5CPQ`AS){(EkE;l0C=( literal 0 HcmV?d00001 diff --git a/installation/images/manage-nuget-keys.png b/installation/images/manage-nuget-keys.png deleted file mode 100644 index f29342dabe4bdbb92324fa8549fcc2de0b46768b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18473 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 text. - @[template](/_contentTemplates/common/nuget.md#generate-nuget-key) ## Edit the NuGet.Config File @@ -52,15 +49,9 @@ Generate a NuGet API key that you will use for the authentication by the Telerik ``` -## Securing Your Credentials - -This article does not cover the scenario of using your Telerik account credentials as plain text in the `NuGet.Config` file due to security concerns. However, you can still use the plain text approach if you must. +## Securing Your NuGet Key ->warning ->* Never hard-code Telerik account credentials or NuGet API keys in a `NuGet.Config` file in a GitHub repository, Docker image, or any location that may be accessed by unauthorized parties. A NuGet key is valuable and bad actors can use it to access the NuGet packages that are licensed under your account. A credentials abuse can lead to a review of the affected Telerik account. ->* If you use single sign-on (SSO) to login into your Telerik account, always use a [NuGet API key]({%slug nuget-keys%}) instead of plain text credentials in the `NuGet.Config` file. +Never hard-code NuGet API keys in a `NuGet.Config` file in a GitHub repository, Docker image, or any location that may be accessed by unauthorized parties. A NuGet key is valuable and bad actors can use it to access the NuGet packages that are licensed under your account. A credentials abuse can lead to a review of the affected Telerik account. For more details about the `NuGet.Config` file, see the following Microsoft resources: * Configuring the NuGet package sources diff --git a/installation/nuget/nuget-keys.md b/installation/nuget/nuget-keys.md index 3ad16d219..a6254a935 100644 --- a/installation/nuget/nuget-keys.md +++ b/installation/nuget/nuget-keys.md @@ -10,14 +10,7 @@ position: 8 This article describes how to use token-based authentication for the Telerik NuGet feed. You will learn how to create and use NuGet API keys to restore Telerik NuGet packages in your Continuous Integration (CI) workflow. -The Telerik NuGet server allows you to authenticate by using two methods: - -* Basic authentication by providing your Telerik user name and password. -* Token-based authentication by providing a NuGet key (recommended). - -When you need to restore Telerik NuGet packages as part of your CI, using NuGet keys is the more secure way to authenticate. This method does not require you to provide your Telerik username and password anywhere in the CI workflow. - -Unlike your Telerik credentials, a NuGet Key has a limited scope and can be used only with the Telerik NuGet server. If any of your NuGet keys is compromised, you can quickly delete it and create a new one. +When you need to restore Telerik NuGet packages as part of your CI, using NuGet keys provides a secure way to authenticate. This method does not require you to provide your Telerik username and password anywhere in the CI workflow. Unlike your Telerik credentials, a NuGet Key has a limited scope and can be used only with the Telerik NuGet server. If any of your NuGet keys is compromised, you can quickly delete it and create a new one. ## Generating NuGet Keys @@ -25,7 +18,7 @@ Unlike your Telerik credentials, a NuGet Key has a limited scope and can be used ## Storing a NuGet Key -> Never check in a NuGet Key with your source code or leave it publicly visible in plain text, for example, as a raw key value in a `nuget.config` file. A NuGet Key is valuable as bad actors can use it to access the NuGet packages that are licensed under your account. A potential key abuse can lead to a review of the affected account. +> Never check in a NuGet Key with your source code or leave it publicly visible in plain text, for example, as a raw key value in a `NuGet.Config` file. A NuGet Key is valuable, as bad actors can use it to access the NuGet packages that are licensed under your account. A potential key abuse can lead to a review of the affected account. To protect the NuGet Key, store it as a secret environment variable. The exact steps depend on your workflow: @@ -43,7 +36,7 @@ For more details on storing and protecting your NuGet Key, check the [Announcing There are two popular ways to use the Telerik NuGet server in a build: -* [Using a nuget.config file with your projects](#using-a-nugetconfig-file-with-your-projects) +* [Using a NuGet.Config file with your projects](#using-a-nugetconfig-file-with-your-projects) * [Using only CLI commands](#using-only-cli-commands) @@ -51,7 +44,7 @@ For more information on how to use NuGet keys in a build, check the [Announcing ### Using a NuGet.Config File with Your Projects -**1.** In your `nuget.config` file, set the `Username` value to `api-key` and the `ClearTextPassword` value to an environment variable name: +**1.** In your `NuGet.Config` file, set the `Username` value to `api-key` and the `ClearTextPassword` value to an environment variable name: ```xml @@ -75,7 +68,7 @@ The exact steps to set the `MY_API_KEY` environment variable depend on your work ### Using .NET CLI Commands -You can use the CLI `add source` (or `update source`) command to set the credentials of a package source. This CLI approach is applicable if your CI system doesn't support default environment variable secrets or if you do not use a custom `nuget.config`. +You can use the CLI `add source` (or `update source`) command to set the credentials of a package source. This CLI approach is applicable if your CI system doesn't support default environment variable secrets or if you do not use a custom `NuGet.Config`. * To set the credentials in Azure DevOps: diff --git a/installation/nuget/visual-studio.md b/installation/nuget/visual-studio.md index f37376c5a..636735b07 100644 --- a/installation/nuget/visual-studio.md +++ b/installation/nuget/visual-studio.md @@ -16,7 +16,11 @@ Before adding the Telerik NuGet server to Visual Studio, make sure you have: 1. .NET MAUI installed on the machine. For more information on the required steps and system requirements, refer to the official Microsoft .NET MAUI documentation. 2. A commercial or trial license for Telerik .NET MAUI. Note that the Telerik NuGet server requires authentication and checks if you have a valid license. -## Step 1: Add the Telerik NuGet Package Source to Visual Studio +## Step 1: Generate an API Key + +@[template](/_contentTemplates/common/nuget.md#generate-nuget-key) + +## Step 2: Add the Telerik NuGet Package Source to Visual Studio To configure the Telerik NuGet feed in Visual Studio: @@ -30,7 +34,7 @@ To configure the Telerik NuGet feed in Visual Studio: You have successfully added the Telerik NuGet feed as a Package source. -## Step 2: Install the Telerik UI for .NET MAUI NuGet Package +## Step 3: Install the Telerik UI for .NET MAUI NuGet Package The next steps describe how to authenticate your local NuGet instance and display the available packages: @@ -39,7 +43,10 @@ The next steps describe how to authenticate your local NuGet instance and displa 1. Select **Manage NuGet Packages for Solution...**. 1. Select the Telerik NuGet **Package source** from the drop-down list. 1. Click the **Browse** tab to see the available packages. -1. Enter your Telerik credentials in the Windows Authentication dialog. +1. In the authentication window, enter `api-key` in the **User name** field and the [generated API key](#step-1-generate-an-api-key) in the **Password** field. + + ![Windows authentication window in VS](../../installation/images/vs-nuget-auth-window.png) + 1. In the Visual Studio Package Manager, you will see all packages that are licensed to your user account. 1. Search for the `Telerik.UI.for.Maui` package and select it. 1. Choose the projects which require the package. @@ -47,7 +54,7 @@ The next steps describe how to authenticate your local NuGet instance and displa ![Manage Packages for Solutions dialog with the search field and the Telerik.UI.for.MAUI package](../../installation/images/maui-nuget.png) -## Step 3: Register the Required Handlers +## Step 4: Register the Required Handlers To visualize the [.NET MAUI](https://www.telerik.com/maui-ui) controls, you have to register the required handlers by calling the `Telerik.Maui.Controls.Compatibility.UseTelerik` extension method inside the `Configure` method of the `MauiProgram.cs` file of your project. From ad0280f4b56e70bc7feb591f30756790995b755a Mon Sep 17 00:00:00 2001 From: Yordan Mitev Date: Tue, 9 Sep 2025 10:58:24 +0300 Subject: [PATCH 2/6] Remove password auth method from using-dotnet-cli.md --- installation/nuget/using-dotnet-cli.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/installation/nuget/using-dotnet-cli.md b/installation/nuget/using-dotnet-cli.md index 3901e9830..922a6997e 100644 --- a/installation/nuget/using-dotnet-cli.md +++ b/installation/nuget/using-dotnet-cli.md @@ -12,25 +12,15 @@ If you do not use a [Visual Studio's NuGet Package manager]({% slug nuget-server Use the `add source` or `update source` command respectively to add the new source and set the credentials required for the authentication by the Telerik NuGet server. -The command below shows one way to add the Telerik NuGet source using .NET CLI. Replace the placeholders with your Telerik account username and password. - -```bash -dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username --password --store-password-in-clear-text -``` - ->caution Storing passwords in plain text is strongly discouraged. This article uses `--store-password-in-clear-text` only for simplicity. For real-world scenarios, use secure methods, such as encrypted passwords or [API keys]({% slug nuget-config %}#generate-a-nuget-key). See Microsoft's security best practices for more information on how to securely store your NuGet source credentials. - -## Using an API Key - -To avoid storing your Telerik account username and password in plain text on your system, use an API key instead: - 1. [Generate a NuGet API Key]({% slug nuget-config %}#generate-a-nuget-key). -1. Add or update the Telerik NuGet source by using .NET CLI and the generated API key instead of a password: +1. Add or update the Telerik NuGet source by using .NET CLI and the generated API key: ```bash dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username api-key --password --store-password-in-clear-text ``` +>See Microsoft's security best practices for more information on how to securely store your NuGet source credentials. + ## See Also * [Generating a NuGet API Key]({% slug nuget-config %}#generate-a-nuget-key) From 7f523e81e22c82d0dbbda63c36e4ed2dcd7979c7 Mon Sep 17 00:00:00 2001 From: Yordan Mitev Date: Tue, 9 Sep 2025 11:05:20 +0300 Subject: [PATCH 3/6] Remove password auth method from using-dotnet-cli.md --- installation/nuget/using-dotnet-cli.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/installation/nuget/using-dotnet-cli.md b/installation/nuget/using-dotnet-cli.md index 922a6997e..61ac021bc 100644 --- a/installation/nuget/using-dotnet-cli.md +++ b/installation/nuget/using-dotnet-cli.md @@ -15,9 +15,9 @@ Use the `add source` or `update source` command respectively to add the new sour 1. [Generate a NuGet API Key]({% slug nuget-config %}#generate-a-nuget-key). 1. Add or update the Telerik NuGet source by using .NET CLI and the generated API key: - ```bash - dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username api-key --password --store-password-in-clear-text - ``` +```bash +dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username api-key --password --store-password-in-clear-text +``` >See Microsoft's security best practices for more information on how to securely store your NuGet source credentials. From 93a7dea9b59ceb21fcb2afeed5f57496cf496009 Mon Sep 17 00:00:00 2001 From: Yordan Mitev Date: Tue, 9 Sep 2025 15:39:48 +0300 Subject: [PATCH 4/6] Update Getting Started articles to use API keys instead of passwords --- _contentTemplates/common/nuget.md | 2 +- get-started/first-steps-vs-code.md | 8 +++++--- get-started/first-steps-vs.md | 7 ++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/_contentTemplates/common/nuget.md b/_contentTemplates/common/nuget.md index 97d0e5933..2021ae7ed 100644 --- a/_contentTemplates/common/nuget.md +++ b/_contentTemplates/common/nuget.md @@ -22,7 +22,7 @@ As the Telerik NuGet server requires authentication, the first step is to obtain 1. Go to the [NuGet Keys](https://www.telerik.com/account/downloads/nuget-keys) page in your Telerik account. 1. Click **Generate New Key +**. - ![Manage NuGet Keys](../../installation/images/account-generate-nuget-api-key.png) + ![Manage NuGet Keys](/installation/images/account-generate-nuget-api-key.png) 1. In the **Key Note** field, add a note that describes the API key. 1. Click **Generate Key**. diff --git a/get-started/first-steps-vs-code.md b/get-started/first-steps-vs-code.md index ab4fcd402..7ea43d322 100644 --- a/get-started/first-steps-vs-code.md +++ b/get-started/first-steps-vs-code.md @@ -58,13 +58,15 @@ If you encounter any issues creating the basic project, see the complete guide i Telerik maintains a NuGet feed with official UI for .NET MAUI releases and service packs. These packages are available for registered users with an active trial or commercial license. Adding the Telerik NuGet server as a source lets you download and install Telerik packages containing controls and utilities. As Visual Studio Code does not offer a built-in NuGet packet manager, use .NET CLI to add a new package source. -To add the Telerik NuGet source using .NET CLI, use the command below. Replace the placeholders with your Telerik account user name and password. +@[template](/_contentTemplates/common/nuget.md#generate-nuget-key) + +Next, use the command below to add the Telerik NuGet source using .NET CLI. Replace the NuGet API key placeholder with the API key that you generated. ```bash -dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username --password --store-password-in-clear-text +dotnet nuget add source https://nuget.telerik.com/v3/index.json --name TelerikNuGetFeed --username api-key --password --store-password-in-clear-text ``` ->caution Storing passwords in plain text is strongly discouraged. This guide uses the `--store-password-in-clear-text` only for simplicity. For real-world scenarios, use secure methods, such as encrypted passwords or API keys. See Microsoft's security best practices for more information on how to securely store your NuGet source credentials. +>See Microsoft's security best practices for more information on how to securely store your NuGet source credentials. ## Step 4: Install the Telerik UI for .NET MAUI Controls diff --git a/get-started/first-steps-vs.md b/get-started/first-steps-vs.md index 605761e6d..68d7b2445 100644 --- a/get-started/first-steps-vs.md +++ b/get-started/first-steps-vs.md @@ -51,6 +51,8 @@ If you encounter any issues creating the basic project, see the complete guide i Telerik maintains a NuGet feed with official UI for .NET MAUI releases and service packs. These packages are available for registered users with an active trial or commercial license. Adding the Telerik NuGet server as a source in Visual Studio lets you download and install Telerik packages containing controls and utilities. +@[template](/_contentTemplates/common/nuget.md#generate-nuget-key) + To add the Telerik NuGet source to Visual Studio: 1. In Visual Studio go to **Tools** > **NuGet Package Manager** > **Package Manager Settings**. @@ -61,7 +63,7 @@ To add the Telerik NuGet source to Visual Studio: 1. Add the `https://nuget.telerik.com/v3/index.json` URL as a **Source**. Click **OK**. -1. Whenever Visual Studio displays a dialog to enter credentials for `nuget.telerik.com`, use your Telerik account email and password. +1. Whenever Visual Studio displays a dialog to enter credentials for `nuget.telerik.com`, use `api-key` as the username and your NuGet API key as the password. ![Add the Telerik NuGet Feed in Visual Studio](./images/telerik-nuget-feed.png) @@ -71,8 +73,7 @@ To add the Telerik NuGet source to Visual Studio: 2. Install the Telerik UI for .NET MAUI package: - 1. Select the `telerik.com` **Package source** that you [added earlier](#step-2-add-the-telerik-nuget-server). As this is a private NuGet feed, you must authenticate - with your [Telerik account](https://www.telerik.com/account/) user name and password. + 1. Select the `telerik.com` **Package source** that you [added earlier](#step-2-add-the-telerik-nuget-server). As this is a private NuGet feed, you must authenticate using `api-key` as the username and [your NuGet API key](#step-3-add-the-telerik-nuget-server) as the password. 1. Select the **Browse** tab, enter `MAUI` in the search box, and then select the `Telerik.UI.for.Maui` package. From 33c034fec5faff8a752cb16c544c457c78faaa66 Mon Sep 17 00:00:00 2001 From: Yordan <60105689+yordan-mitev@users.noreply.github.com> Date: Tue, 9 Sep 2025 15:43:54 +0300 Subject: [PATCH 5/6] Polish first-steps-vs.md --- get-started/first-steps-vs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/first-steps-vs.md b/get-started/first-steps-vs.md index 68d7b2445..f93a0d475 100644 --- a/get-started/first-steps-vs.md +++ b/get-started/first-steps-vs.md @@ -53,7 +53,7 @@ Telerik maintains a NuGet feed with official UI for .NET MAUI releases and servi @[template](/_contentTemplates/common/nuget.md#generate-nuget-key) -To add the Telerik NuGet source to Visual Studio: +Next, add the Telerik NuGet source to Visual Studio: 1. In Visual Studio go to **Tools** > **NuGet Package Manager** > **Package Manager Settings**. From 96c2c2b0d1b7fb1b934da97c6390298245e2e629 Mon Sep 17 00:00:00 2001 From: Yordan Mitev Date: Tue, 9 Sep 2025 15:51:41 +0300 Subject: [PATCH 6/6] Polish NuGet docs --- _contentTemplates/common/nuget.md | 3 +-- get-started/first-steps-vs.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/_contentTemplates/common/nuget.md b/_contentTemplates/common/nuget.md index 2021ae7ed..3e529b915 100644 --- a/_contentTemplates/common/nuget.md +++ b/_contentTemplates/common/nuget.md @@ -27,7 +27,6 @@ As the Telerik NuGet server requires authentication, the first step is to obtain 1. In the **Key Note** field, add a note that describes the API key. 1. Click **Generate Key**. 1. Select **Copy and Close**. Once you close the window, you can no longer copy the generated key. For security reasons, the **NuGet Keys** page displays only a portion of the key. -1. Store the generated NuGet API key as you will need it in the next steps. +1. Store the generated NuGet API key as you will need it in the next steps. Whenever you need to authenticate your system with the Telerik NuGet server, use `api-key` as the username and your generated API key as the password. -Whenever you need to authenticate your system with the Telerik NuGet server, use `api-key` as the username and your generated API key as the password. #end \ No newline at end of file diff --git a/get-started/first-steps-vs.md b/get-started/first-steps-vs.md index 68d7b2445..f93a0d475 100644 --- a/get-started/first-steps-vs.md +++ b/get-started/first-steps-vs.md @@ -53,7 +53,7 @@ Telerik maintains a NuGet feed with official UI for .NET MAUI releases and servi @[template](/_contentTemplates/common/nuget.md#generate-nuget-key) -To add the Telerik NuGet source to Visual Studio: +Next, add the Telerik NuGet source to Visual Studio: 1. In Visual Studio go to **Tools** > **NuGet Package Manager** > **Package Manager Settings**.