From bb389f94279b31559157db953efcf55519d17a03 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 09:40:41 -0400 Subject: [PATCH 01/22] Add wam section --- .../sdk/authentication/additional-methods.md | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 3317e088e1510..ed40c55190a2c 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -36,6 +36,109 @@ foreach (var blobItem in client.GetBlobContainers()) For more exact control, such as setting redirect URIs, you can supply specific arguments to `InteractiveBrowserCredential` such as `redirect_uri`. +### Authenticate the default system account via WAM + +Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. Web Account Manager (WAM) is a broker service that allows apps to request OAuth tokens from identity providers, such as Microsoft Entra ID, in a seamless fashion. With it, identity providers can natively plug into the OS and provide the service to other apps to streamline the login process. WAM also supports a silent login process that automatically uses a default account so the user does not have to repeatedly select it. + +To enable sign-in using WAM and the default system account: + +1. Install the following NuGet packages: + + ```dotnetcli + dotnet add package Azure.Identity + dotnet add package Azure.Identity.Broker + ``` + +2. Get the handle of the parent window to which the WAM account picker window should be docked: + + ### [WinForms](#tab/winforms) + + ```csharp + private async void testBrokeredAuth_Click(object sender, EventArgs e) + { + IntPtr windowHandle = this.Handle; + + // code omitted for brevity + } + ``` + + ### [WPF](#tab/wpf) + + ```csharp + // MainWindow.xaml.cs + private void Button_Click(object sender, RoutedEventArgs e) + { + var wih = new System.Windows.Interop.WindowInteropHelper(this); + var windowHandle = wih.Handle; + } + ``` + + ### [WinUI 3](#tab/winui3) + + ```csharp + // MainWindow.xaml.cs + private async void myButton_Click(object sender, RoutedEventArgs e) + { + // Retrieve the window handle (HWND) of the current WinUI 3 window. + var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); + } + ``` + + ### [Console](#tab/console) + + ```csharp + [DllImport("user32.dll", ExactSpelling = true)] + static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); + + [DllImport("kernel32.dll")] + static extern IntPtr GetConsoleWindow(); + + // This is your window handle! + IntPtr GetConsoleOrTerminalWindow() + { + IntPtr consoleHandle = GetConsoleWindow(); + IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); + + return handle; + } + + enum GetAncestorFlags + { + GetParent = 1, + GetRoot = 2, + /// + /// Retrieves the owned root window by walking the chain of parent and owner windows returned by GetParent. + /// + GetRootOwner = 3 + } + ``` + + --- + + > [!NOTE] + > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving the parent window handle. + +3. Create a broker-enabled instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. + + The following example shows how to enable sign-in with the default system account: + + ```csharp + using Azure.Identity; + using Azure.Identity.Broker; + + // code omitted for brevity + + // Get the window handle using the selected approach in step 2 + IntPtr windowHandle = GetForegroundWindow(); + InteractiveBrowserCredential credential = new( + new InteractiveBrowserCredentialBrokerOptions(windowHandle) + ); + ``` + +4. Use the broker-enabled `InteractiveBrowserCredential` instance. + +Once you opt into this behavior, the credential type attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential type falls back to displaying the account picker dialog, from which the user can select the appropriate account. + ## Device code authentication This method interactively authenticates a user on devices with limited UI (typically devices without a keyboard): From 88635d2051bc3f46aecb885a9a692bc348047791 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 09:58:37 -0400 Subject: [PATCH 02/22] Fix tabs --- .../sdk/authentication/additional-methods.md | 118 +++++++++--------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index f956d4206099a..ec932d5f3b3db 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -49,76 +49,76 @@ To enable sign-in using WAM and the default system account: dotnet add package Azure.Identity.Broker ``` -2. Get the handle of the parent window to which the WAM account picker window should be docked: +1. Get the handle of the parent window to which the WAM account picker window should be docked: - ### [WinForms](#tab/winforms) +# [WinForms](#tab/winforms) - ```csharp - private async void testBrokeredAuth_Click(object sender, EventArgs e) - { - IntPtr windowHandle = this.Handle; - - // code omitted for brevity - } - ``` +```csharp +private async void testBrokeredAuth_Click(object sender, EventArgs e) +{ + IntPtr windowHandle = this.Handle; - ### [WPF](#tab/wpf) + // code omitted for brevity +} +``` - ```csharp - // MainWindow.xaml.cs - private void Button_Click(object sender, RoutedEventArgs e) - { - var wih = new System.Windows.Interop.WindowInteropHelper(this); - var windowHandle = wih.Handle; - } - ``` +### [WPF](#tab/wpf) - ### [WinUI 3](#tab/winui3) +```csharp +// MainWindow.xaml.cs +private void Button_Click(object sender, RoutedEventArgs e) +{ + var wih = new System.Windows.Interop.WindowInteropHelper(this); + var windowHandle = wih.Handle; +} +``` - ```csharp - // MainWindow.xaml.cs - private async void myButton_Click(object sender, RoutedEventArgs e) - { - // Retrieve the window handle (HWND) of the current WinUI 3 window. - var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); - } - ``` +### [WinUI 3](#tab/winui3) - ### [Console](#tab/console) +```csharp +// MainWindow.xaml.cs +private async void myButton_Click(object sender, RoutedEventArgs e) +{ + // Retrieve the window handle (HWND) of the current WinUI 3 window. + var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); +} +``` - ```csharp - [DllImport("user32.dll", ExactSpelling = true)] - static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); - - [DllImport("kernel32.dll")] - static extern IntPtr GetConsoleWindow(); +### [Console](#tab/console) + +```csharp +[DllImport("user32.dll", ExactSpelling = true)] +static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); + +[DllImport("kernel32.dll")] +static extern IntPtr GetConsoleWindow(); + +// This is your window handle! +IntPtr GetConsoleOrTerminalWindow() +{ + IntPtr consoleHandle = GetConsoleWindow(); + IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); - // This is your window handle! - IntPtr GetConsoleOrTerminalWindow() - { - IntPtr consoleHandle = GetConsoleWindow(); - IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); - - return handle; - } - - enum GetAncestorFlags - { - GetParent = 1, - GetRoot = 2, - /// - /// Retrieves the owned root window by walking the chain of parent and owner windows returned by GetParent. - /// - GetRootOwner = 3 - } - ``` + return handle; +} - --- +enum GetAncestorFlags +{ + GetParent = 1, + GetRoot = 2, + /// + /// Retrieves the owned root window by walking the chain of parent and owner windows returned by GetParent. + /// + GetRootOwner = 3 +} +``` + +--- - > [!NOTE] - > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving the parent window handle. +> [!NOTE] +> Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving the parent window handle. -3. Create a broker-enabled instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. +1. Create a broker-enabled instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. The following example shows how to enable sign-in with the default system account: @@ -135,7 +135,7 @@ To enable sign-in using WAM and the default system account: ); ``` -4. Use the broker-enabled `InteractiveBrowserCredential` instance. +1. Use the broker-enabled `InteractiveBrowserCredential` instance. Once you opt into this behavior, the credential type attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential type falls back to displaying the account picker dialog, from which the user can select the appropriate account. From 3e0ca7a58b073a853f543046e983094ff613e8d5 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 10:34:01 -0400 Subject: [PATCH 03/22] updates --- .../sdk/authentication/additional-methods.md | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index ec932d5f3b3db..6b9c5a8ef90ed 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -38,27 +38,33 @@ For more exact control, such as setting redirect URIs, you can supply specific a ### Authenticate the default system account via WAM -Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. Web Account Manager (WAM) is a broker service that allows apps to request OAuth tokens from identity providers, such as Microsoft Entra ID, in a seamless fashion. With it, identity providers can natively plug into the OS and provide the service to other apps to streamline the login process. WAM also supports a silent login process that automatically uses a default account so the user does not have to repeatedly select it. +Web Account Manager (WAM) is a system authentication broker service that allows apps to seamlessly request OAuth tokens from identity providers, such as Microsoft Entra ID. WAM enables identity providers to natively plug into the OS and provide the service to other apps to streamline the login process. WAM offers the following benefits: -To enable sign-in using WAM and the default system account: +- **Feature support**: Apps can access OS-level and service-level capabilities, including Windows Hello, conditional access policies, and FIDO keys. +- **Streamlined single sign-on**: Apps can use the built-in account picker, allowing the user to select an existing account instead of repeatedly entering the same credentials. +- **Enhanced security**: Bug fixes and enhancements ship with Windows. +- **Token protection**: Refresh tokens are device-bound, and apps can acquire device-bound access tokens. -1. Install the following NuGet packages: +Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM also supports a silent login process that automatically uses a default account so the user does not have to repeatedly select it. + +To use WAM and the default system account in your app: + +1. Add the [Azure.Identity](https://www.nuget.org/packages/Azure.Identity) and [Azure.Identity.Broker](https://www.nuget.org/packages/Azure.Identity.Broker) NuGet packages to your project. ```dotnetcli dotnet add package Azure.Identity dotnet add package Azure.Identity.Broker ``` -1. Get the handle of the parent window to which the WAM account picker window should be docked: +1. Get the handle of the parent window to which the WAM account picker window should be docked. # [WinForms](#tab/winforms) ```csharp -private async void testBrokeredAuth_Click(object sender, EventArgs e) +// Form1.cs +private void button1_Click(object sender, EventArgs e) { - IntPtr windowHandle = this.Handle; - - // code omitted for brevity + var hWnd = this.Handle; } ``` @@ -79,7 +85,6 @@ private void Button_Click(object sender, RoutedEventArgs e) // MainWindow.xaml.cs private async void myButton_Click(object sender, RoutedEventArgs e) { - // Retrieve the window handle (HWND) of the current WinUI 3 window. var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); } ``` @@ -87,13 +92,13 @@ private async void myButton_Click(object sender, RoutedEventArgs e) ### [Console](#tab/console) ```csharp +// Program.cs [DllImport("user32.dll", ExactSpelling = true)] static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); -// This is your window handle! IntPtr GetConsoleOrTerminalWindow() { IntPtr consoleHandle = GetConsoleWindow(); @@ -106,9 +111,6 @@ enum GetAncestorFlags { GetParent = 1, GetRoot = 2, - /// - /// Retrieves the owned root window by walking the chain of parent and owner windows returned by GetParent. - /// GetRootOwner = 3 } ``` @@ -116,11 +118,9 @@ enum GetAncestorFlags --- > [!NOTE] -> Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving the parent window handle. - -1. Create a broker-enabled instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. +> Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about working with window handle context. - The following example shows how to enable sign-in with the default system account: +1. Create an instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. Optionally, set the `UseDefaultBrokerAccount` option to `true` to enable silent brokered authentication, which will automatically select the default account. ```csharp using Azure.Identity; @@ -129,9 +129,14 @@ enum GetAncestorFlags // code omitted for brevity // Get the window handle using the selected approach in step 2 - IntPtr windowHandle = GetForegroundWindow(); + IntPtr windowHandle = GetForegroundWindow(); + InteractiveBrowserCredential credential = new( new InteractiveBrowserCredentialBrokerOptions(windowHandle) + { + // Enable silent brokered authentication using the default account + UseDefaultBrokerAccount = true, + } ); ``` From b3bbbc672d6bf3c8f4ced6153f01f9bcad8f544c Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 10:44:30 -0400 Subject: [PATCH 04/22] updates --- .../sdk/authentication/additional-methods.md | 122 +++++++++--------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 6b9c5a8ef90ed..553fd5f79cb56 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -58,68 +58,68 @@ To use WAM and the default system account in your app: 1. Get the handle of the parent window to which the WAM account picker window should be docked. -# [WinForms](#tab/winforms) - -```csharp -// Form1.cs -private void button1_Click(object sender, EventArgs e) -{ - var hWnd = this.Handle; -} -``` - -### [WPF](#tab/wpf) - -```csharp -// MainWindow.xaml.cs -private void Button_Click(object sender, RoutedEventArgs e) -{ - var wih = new System.Windows.Interop.WindowInteropHelper(this); - var windowHandle = wih.Handle; -} -``` - -### [WinUI 3](#tab/winui3) - -```csharp -// MainWindow.xaml.cs -private async void myButton_Click(object sender, RoutedEventArgs e) -{ - var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); -} -``` - -### [Console](#tab/console) - -```csharp -// Program.cs -[DllImport("user32.dll", ExactSpelling = true)] -static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); - -[DllImport("kernel32.dll")] -static extern IntPtr GetConsoleWindow(); - -IntPtr GetConsoleOrTerminalWindow() -{ - IntPtr consoleHandle = GetConsoleWindow(); - IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); + ### [WinForms](#tab/winforms) + + ```csharp + // Form1.cs + private void button1_Click(object sender, EventArgs e) + { + var hWnd = this.Handle; + } + ``` + + ### [WPF](#tab/wpf) + + ```csharp + // MainWindow.xaml.cs + private void Button_Click(object sender, RoutedEventArgs e) + { + var wih = new System.Windows.Interop.WindowInteropHelper(this); + var windowHandle = wih.Handle; + } + ``` + + ### [WinUI 3](#tab/winui3) + + ```csharp + // MainWindow.xaml.cs + private async void myButton_Click(object sender, RoutedEventArgs e) + { + var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); + } + ``` + + ### [Console](#tab/console) + + ```csharp + // Program.cs + [DllImport("user32.dll", ExactSpelling = true)] + static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); + + [DllImport("kernel32.dll")] + static extern IntPtr GetConsoleWindow(); + + IntPtr GetConsoleOrTerminalWindow() + { + IntPtr consoleHandle = GetConsoleWindow(); + IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); + + return handle; + } + + enum GetAncestorFlags + { + GetParent = 1, + GetRoot = 2, + GetRootOwner = 3 + } + ``` + + --- + + > [!NOTE] + > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about working with window handle context. - return handle; -} - -enum GetAncestorFlags -{ - GetParent = 1, - GetRoot = 2, - GetRootOwner = 3 -} -``` - ---- - -> [!NOTE] -> Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about working with window handle context. - 1. Create an instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. Optionally, set the `UseDefaultBrokerAccount` option to `true` to enable silent brokered authentication, which will automatically select the default account. ```csharp From 5b50ab9df78f5fead01ada7c3d871afd87d141c1 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 11:05:35 -0400 Subject: [PATCH 05/22] updates --- .../sdk/authentication/additional-methods.md | 94 +++++-------------- 1 file changed, 22 insertions(+), 72 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 553fd5f79cb56..7cec35e9dea0e 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -58,68 +58,17 @@ To use WAM and the default system account in your app: 1. Get the handle of the parent window to which the WAM account picker window should be docked. - ### [WinForms](#tab/winforms) - - ```csharp - // Form1.cs - private void button1_Click(object sender, EventArgs e) - { - var hWnd = this.Handle; - } - ``` - - ### [WPF](#tab/wpf) - - ```csharp - // MainWindow.xaml.cs - private void Button_Click(object sender, RoutedEventArgs e) - { - var wih = new System.Windows.Interop.WindowInteropHelper(this); - var windowHandle = wih.Handle; - } - ``` - - ### [WinUI 3](#tab/winui3) - - ```csharp - // MainWindow.xaml.cs - private async void myButton_Click(object sender, RoutedEventArgs e) - { - var windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this); - } - ``` - - ### [Console](#tab/console) - - ```csharp - // Program.cs - [DllImport("user32.dll", ExactSpelling = true)] - static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags); - - [DllImport("kernel32.dll")] - static extern IntPtr GetConsoleWindow(); - - IntPtr GetConsoleOrTerminalWindow() - { - IntPtr consoleHandle = GetConsoleWindow(); - IntPtr handle = GetAncestor(consoleHandle, GetAncestorFlags.GetRootOwner ); - - return handle; - } - - enum GetAncestorFlags - { - GetParent = 1, - GetRoot = 2, - GetRootOwner = 3 - } - ``` - - --- - - > [!NOTE] - > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about working with window handle context. - +> [!NOTE] +> This example shows how to get the window handle for a Windows Forms app. Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window context for other types of apps. + +```csharp +// Form1.cs +private async void testBrokeredAuth_Click(object sender, EventArgs e) +{ + IntPtr windowHandle = this.Handle; +} +``` + 1. Create an instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. Optionally, set the `UseDefaultBrokerAccount` option to `true` to enable silent brokered authentication, which will automatically select the default account. ```csharp @@ -127,17 +76,18 @@ To use WAM and the default system account in your app: using Azure.Identity.Broker; // code omitted for brevity + private async void testBrokeredAuth_Click(object sender, EventArgs e) + { + IntPtr windowHandle = this.Handle; - // Get the window handle using the selected approach in step 2 - IntPtr windowHandle = GetForegroundWindow(); - - InteractiveBrowserCredential credential = new( - new InteractiveBrowserCredentialBrokerOptions(windowHandle) - { - // Enable silent brokered authentication using the default account - UseDefaultBrokerAccount = true, - } - ); + InteractiveBrowserCredential credential = new( + new InteractiveBrowserCredentialBrokerOptions(windowHandle) + { + // Enable silent brokered authentication using the default account + UseDefaultBrokerAccount = true, + } + ); + } ``` 1. Use the broker-enabled `InteractiveBrowserCredential` instance. From e83613458c10c698a17001c8ac0c48fde99fa8df Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Wed, 21 Aug 2024 11:11:10 -0400 Subject: [PATCH 06/22] fix formatting --- .../sdk/authentication/additional-methods.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 7cec35e9dea0e..30543e46cf979 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -58,16 +58,16 @@ To use WAM and the default system account in your app: 1. Get the handle of the parent window to which the WAM account picker window should be docked. -> [!NOTE] -> This example shows how to get the window handle for a Windows Forms app. Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window context for other types of apps. + ```csharp + // Form1.cs + private async void testBrokeredAuth_Click(object sender, EventArgs e) + { + IntPtr windowHandle = this.Handle; + } + ``` -```csharp -// Form1.cs -private async void testBrokeredAuth_Click(object sender, EventArgs e) -{ - IntPtr windowHandle = this.Handle; -} -``` + > [!NOTE] + > This example shows how to get the window handle for a Windows Forms app. Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window context for other types of apps. 1. Create an instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. Optionally, set the `UseDefaultBrokerAccount` option to `true` to enable silent brokered authentication, which will automatically select the default account. From 04b6553c43f723e4e408e2faed31341eac2dd98f Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 14:53:29 -0400 Subject: [PATCH 07/22] dotnet parity updates --- .../sdk/authentication/additional-methods.md | 107 +++++++++++++++++- ...account-manager-sign-in-account-picker.png | Bin 0 -> 204720 bytes 2 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 docs/azure/sdk/media/web-account-manager-sign-in-account-picker.png diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 30543e46cf979..09d4fd35ca519 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -16,6 +16,21 @@ This method interactively authenticates an application through [`InteractiveBrow Interactive browser authentication enables the application for all operations allowed by the interactive login credentials. As a result, if you're the owner or administrator of your subscription, your code has inherent access to most resources in that subscription without having to assign any specific permissions. For this reason, the use of interactive browser authentication is discouraged for anything but experimentation. +### Enable applications for interactive browser authentication + +Perform the following steps to enable the application to authenticate through the interactive browser flow. These steps also work for [device code authentication](#device-code-authentication) described later. This process is only necessary only if you are using `InteractiveBrowserCredential` in your code. + +1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left-hand menu. +1. Select the registration for your app, then select **Authentication**. +1. Under **Advanced settings**, select **Yes** for **Allow public client flows**. +1. Select **Save** to apply the changes. +1. To authorize the application for specific resources, navigate to the resource in question, select **API Permissions**, and enable **Microsoft Graph** and other resources you want to access. Microsoft Graph is usually enabled by default. + + > [!IMPORTANT] + > You must also be the admin of your tenant to grant consent to your application when you sign in for the first time. + +If you can't configure the device code flow option on your Active Directory, your application might need to be multitenant. To make this change, navigate to the **Authentication** panel, select **Accounts in any organizational directory** (under **Supported account types**), and then select **Yes** for **Allow public client flows**. + ### Example using InteractiveBrowserCredential The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): @@ -36,16 +51,89 @@ foreach (var blobItem in client.GetBlobContainers()) For more exact control, such as setting redirect URIs, you can supply specific arguments to `InteractiveBrowserCredential` such as `redirect_uri`. -### Authenticate the default system account via WAM +## Interactive brokered authentication + +This method interactively authenticates an application through [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) by collecting user credentials using the system authentication broker. A system authentication broker is an app running on a user's machine that manages the authentication handshakes and token maintenance for all connected accounts. Currently, only the Windows authentication broker, Web Account Manager (WAM), is supported. Users on macOS and Linux will be authenticated through a browser. -Web Account Manager (WAM) is a system authentication broker service that allows apps to seamlessly request OAuth tokens from identity providers, such as Microsoft Entra ID. WAM enables identity providers to natively plug into the OS and provide the service to other apps to streamline the login process. WAM offers the following benefits: +WAM enables identity providers such as Microsoft Entra ID to natively plug into the OS and provide the service to other apps to streamline the login process. WAM offers the following benefits: - **Feature support**: Apps can access OS-level and service-level capabilities, including Windows Hello, conditional access policies, and FIDO keys. - **Streamlined single sign-on**: Apps can use the built-in account picker, allowing the user to select an existing account instead of repeatedly entering the same credentials. - **Enhanced security**: Bug fixes and enhancements ship with Windows. - **Token protection**: Refresh tokens are device-bound, and apps can acquire device-bound access tokens. -Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM also supports a silent login process that automatically uses a default account so the user does not have to repeatedly select it. +Personal Microsoft accounts and work or school accounts are supported. If a supported version of Windows is used, the default browser-based UI is replaced with a smoother authentication experience, similar to Windows built-in apps. + +Interactive brokered authentication enables the application for all operations allowed by the interactive login credentials. As a result, if you're the owner or administrator of your subscription, your code has inherent access to most resources in that subscription without having to assign any specific permissions. + +### Enable applications for interactive brokered authentication + +Perform the following steps to enable the application to authenticate through the interactive broker flow. + +1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left-hand menu. +1. Select the registration for your app, then select **Authentication**. +1. Add the WAM redirect URI to your app registration via a platform configuration: + 1. Under **Platform configurations**, select **+ Add a platform**. + 1. Under **Configure platforms**, select the tile for your application type (platform) to configure its settings; For example, **mobile and desktop applications**. + 1. In **Custom redirect URIs**, enter the WAM redirect URI: + + ```text + ms-appx-web://microsoft.aad.brokerplugin/{client_id} + ``` + + The `{client_id}` placeholder must be replaced with the Application (client) ID listed on the Overview pane of the app registration. + + 1. Select **Configure**. + + To learn more, see [Add a redirect URI to an app registration](/entra/identity-platform/quickstart-register-app#add-a-redirect-uri). + +1. Back on the **Authentication** pane, under **Advanced settings**, select **Yes** for **Allow public client flows**. +1. Select **Save** to apply the changes. +1. To authorize the application for specific resources, navigate to the resource in question, select **API Permissions**, and enable **Microsoft Graph** and other resources you want to access. Microsoft Graph is usually enabled by default. + + > [!IMPORTANT] + > You must also be the admin of your tenant to grant consent to your application when you sign in for the first time. + +### Example using InteractiveBrowserCredential + +The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): + +```csharp +using Azure.Identity; +using Azure.Identity.Broker; + +private void button1_Click(object sender, EventArgs e) +{ + IntPtr windowHandle = this.Handle; + + // To authenticate and authorize with an app, use the following line to get a credential and + // substitute the and placeholders with the values for your app and tenant. + // credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle)); + + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net/"), + credential + ); + + // Prompt for credentials appears on first use of the client + foreach(var container in client.GetBlobContainers()) + { + Console.WriteLine(container.Name); + } +} +``` + +For the code to run successfully, your user account must be assigned an Azure role on the storage account that allows access to blob containers such as **Storage Account Data Contributor**. If an app is specified, it must have API permissions set for **user_impersonation Access Azure Storage** (step 6 in the previous section). This API permission allows the app to access Azure storage on behalf of the signed-in user after consent is granted during sign-in. + +The following screenshot shows the user sign-in experience: + +:::image type="content" source="../media/web-account-manager-sign-in-account-picker.png" alt-text="A screenshot that shows the sign-in experience when using the interactive browser broker credential to authenticate a user." ::: + +### Authenticate the default system account via WAM + +Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM and `InteractiveBrowserCredential` also support a silent login process that automatically uses a default account so the user does not have to repeatedly select it. To use WAM and the default system account in your app: @@ -80,13 +168,24 @@ To use WAM and the default system account in your app: { IntPtr windowHandle = this.Handle; - InteractiveBrowserCredential credential = new( + // To authenticate and authorize with an app, use the following line to get a credential and + // substitute the and placeholders with the values for your app and tenant. + // credential = InteractiveBrowserCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) + var credential = new InteractiveBrowserCredential( new InteractiveBrowserCredentialBrokerOptions(windowHandle) { // Enable silent brokered authentication using the default account UseDefaultBrokerAccount = true, } ); + + var client = new BlobServiceClient(new Uri("https://.blob.core.windows.net/"), credential); + + // Prompt for credentials appears on first use of the client + foreach(var container in client.GetBlobContainers()) + { + Console.WriteLine(container.Name); + } } ``` diff --git a/docs/azure/sdk/media/web-account-manager-sign-in-account-picker.png b/docs/azure/sdk/media/web-account-manager-sign-in-account-picker.png new file mode 100644 index 0000000000000000000000000000000000000000..bb26d331cd22da698c2cc184ba7b9d1b1d360df4 GIT binary patch literal 204720 zcma&NV|XS(*Dm_RwvEY?iEZ1qHL-1HVoYq?wrx%9Ol;dH?>_Ih_dfs5kM6#%Rb8uA zt*TzNaCf+ZoHzn3E-U~5K#-IWQ33!!W4^CIXwYxUZ1v3K_XEaWLemKVKz07l1+ryI zBa+Z`8g*t}7N5$sq(KNaM0EhvSB7!RJnde>lleA+FL~4u7M;&gIwo83f@S>tj zQMzL+q&DCX#S}^a;CS)BP@a_#fHJZ*h$h6pgpWiHdQXJdP=Lp7&~b_cGy-%TA?UNd zfg&jBm>Ryg7F=y*EHv3rBDQ%R|3=q#8Z)!5M=8JV;wJNv_jVT<*7d^2{({Jic* zjj!tBBJZ=!_M=U%Ggp?L@5{kY`D`AKTVrfU_k)42lboRKw}%qqmd}T;M|y8& zzs%2V`gf$Bhjjqp`r~U+-*fNd;LPoFWyJ4zCVTt!>T^aP!vE^+di!<1LjNUL|1;t1 zoWASE^5NeE|E(L}Z2?LI#FUwb}=cF_D@z_#BXzn*ⅅ~W3{%P}7>OP4xu0DPCws>Q2edhGs-jDFT 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 p6F-A&*jaOg~ zm?g2vn$DNtJui$SeVRV3Hf`-Te4tz>AbL)R9peSAB9@Jb`8f#(%R`z%4CH!h5jIWHZNN^NLntO} z_oo@jshO|!VI5r>Md#4^g+z|$kf!sjY?j?M0Jr5n|C z%wvOCIOko=8#knIh(n14%?E@Fu}~G)X)S2%KaU?ieg}9T`}g-w-PSZ5ndBW-$c{$X zqp&-ev`W+zP-I|^)D*|7YOUwEFV5I^L^2SW1jYVL;M#^+m5@sgal@#&-R+co#Q5ZD z>I02t%P&whu05B2o_T7`kRnZ#%56=dPZPF$@Z)<<(!}PNCdF($3Atq<}GHi?ms3(`410MGz9zRpnAuS;j*vH<^>tL4Hpah-A zm4!=OH2$9|y-MueFyiNN^{;j?vfHd>q4*r01}*F@r_8$4Qd5XM7H21Fc!UEeg3nR8VfgYw(9@3E$;nBcB!oLB@{ zn5PI6-iAhjR)dgnQeoN%*6SD3Nf2ZoV`Ezt5FR?HK`Njj-^f!HX?krB+g~I?VzY^O zBcL9Tk3M->byd{!+r?O|Yo+_<^~k)|<*_m|g|P#v)vaE-h>Gm6VEs*62%sH~;#;rx zGoEI!&ujjLf!EYGaup`2)yiRt063k0-S3+it#3nBs`ue-PDik-psX6QDsKt;z~#zh zh}>xT*FQDd9wG^Y5RL!fzRb8#$Op+;8?lHwRGYVz>QAIWHe)0{CQBw}X_IMHXV{8cr6>E-SH72{w3O%T6d zR(W2+ijyK%fQT%fsBRqC@28R19G9iy7-}cpc}|^Vqx40YikzoTJUi~Gq1w7CdcFdD zQkt`4#|4H+vb+rfdB!Q|^)Dd-^Xi@$H{GBXEm2;kyp&sk~BUF^Y(rEedmX z!+SsqlG;|tVy_LKQf_Nk{Z_6y>Gjt{Ilh{Tx$?4V=Y@$`ba3cR-_HfLDUu)oBh66p zRL={xY9j9})sJj0g4)Dpt6|1f7LX!4vBk2hjttLg#lnqlJ1dec%Zb78nFmN=Ly`QL zSm%8j?)E<=!!D$zBZv+;&yI7zu38;Uc|DyCzWTw3Ay&pR5SaW5hoTe}0gj0?K^_@< zY>U%^vCh`na@JNiZdGl%ffTF4nIRGX~e{1He9e>VM4DXJTv%ve1gYdi2W~yp!4YIf| z_-j-%)N@4M5^MO6DK-}t&ZR*rGnx|+3#208fn6Ia#s7qUtQzZB$%3%$R&ZmFi!gKqn3&oXgrbFaDW(Pc4`7{NPSuFlz zyYsjwzglt78QFj(FEJlaE9vdZ^wFZB3|)w2I+w#gnpr7|Zk9ikM%m^%8PLVCcY5#G z*{VIEvY%)zT#|QZ6)I&u22EJ5>B_p(u@)=-d4b`hNR|CQE>L(Ew)q(9noDoPa@msmdm6gd`q%E4Z?iaSxR{$Z=WV8VP5gc zSkt#)D6}o1&(emd;blAZ=DNG?ixXc=Kb`4k{LeD?B5ek&*4*BjjGkK|za=M|Bs@Oa z@Oi#c3ni6at%%RfT;OdvKI6>|NU0Q87j{^^SPE=G&uCkbYQcHhHS6CkckB1a`n2#=fNfnd6=i=9TDXchJZ zx$&4L2EPjM!DJ( zdmA$x&QDvGfU1+~ZP5Dn;C&L-yM&+Kqx$H^*5PZ7j#9f*;2e3SJWQ=%rM+cgD&1HH zCI33V7Kto2d#q|nBN0*);&6`zS{~Gd2$n*(&!Un|$&_yI2835RWo&!MkX>`E^AeL1 zLFfoDIQQ?qwHdA-8%>quzaRv^nn7wI>Q zpn(>5qW$ndZ~Gn7H%dD*sBU{-ADXIbUQ(KZy z>G&eopg78hglwHyK4O<*P&UcsgCC_VMPHxK`m*?%3142Hhu$eZ0R0 zD}bf}QHCz#*U|JO|tgU&j3PI>BuQzcd8RfdGLlP;v2UE?NKtYLCYg17vxPb3QKyRGG{D{}LY z+Pv>MPtcu021_(jk5k&CZWVLML2@YE3%8??l2{(U=q~zFT?ppUY zk7P4B&80U%TaFnM60(1=6oXscD&FoPX}q5gxa)6>*y_Za;slHw3B9Ax%oVCkvet0e z=cPC}@t1`~k)^Dy>9*>WZ%sN)jWeF}bFa-^?C-@=taChR*2DOKD?Rdlz?H?5%gmgO zi#0LQRpFj%E{IbiQ?_(BX<;@;%?@}i^?KN}&=||T`a~!9Xm59Z+f~6oC$|u?DdZqI zEIQ*?NPqw+v8IaV()-dDKMTX^pI_wN4)}}u!j(}2Pu?Q#)$E5c3LTD(+ zwJN(RwhOKU_n+-tEjlLGyB)?%q`x^_rS=lkU2b*4sT7G~-~do7c>UXpid4tH7s>7; zb!$QG;9s}j?@#4ssw2+&bL~YVeyt&=YbzV*f`ZtHRXAS}xMO9}MYrEbHqj(FZTlRS zcjsMH;S$6_e)t@;?{(pwZ8UQ*UX&qw!eBs7&`i#2+!8@9}9w*XDjxj zv;?0h#2w%s(1T5C+|>QHK?w;IqfvM~9QpKd5PK3#jcjB{VoTjR8&}dCtzAs!Na_bD zaC^ime|0|m9}7@hdT!M2kD&HvzaXHkXFX95F`Z26C(2Wr%&X$v=p*dLm7n ztvV*yz|+76V7UR3>5*9sQ@b8I-y`^QB9h3Mq7efuo0`#IrlSt(t>-Dnj%B9sGsjTP z{i;s;u)6mc=run=+hLU*v;qGJ3`s&6X@E!@A8mUp1CFhhlYZ9G3CAU|o1Krl6RcY~ z!7z{px6x}LdJKa5A3`WGTsvpvV8}(Q(}Duiwx~OmG2uicQW9?DQcd!5EX+8Yghr?yH;W54FR!AZrG=h@B3J_c`ZDOo4+hYhl7(IyVrU@j@vohaV! z0tw_?_)GLDH7f}9-dr7&tWH((@_#6Y=kr6i_RY1WnWyu@Sy|W>++rk+i;-{%t#CD? zrcP`w6au7Nuxp+ME`r7dMDEoET<@7!ZaWX~2v4-P^?H^{vKT3C$g-RONHnp>}Ue{{|wLeiS zBdhNCb~zs_jxZ-->h99!q-Me$qdU7S*M$jswTx0HE%Pr`ZM%ljvXxSitwCFTAeX`x zg&8K~SARmfR1ll8eY|W_f8yOE2hN~zm7J^@e4yjHijOR!i_mN-s4?Av^3aNFh4Fa5 zK&ldU!Bz`!Y(nm-?oDk+J2eZ9jSDvJa~1|57cnc#fzzSH&=SkwSnGAJGXUWa2u06x zBvYr)&feDkez&TV%~QHqaf6u^M`mTgYp}pD6TdO36*RTgNx{yh>TTZ z>wQTp`NJRwCh|2nspo{~#~Yt}%H?rar{P}v>P`Y+@D-u=McWyat@R+X|4KsPpp@Ou zLFGdA8IHmscc3p`ZokEvvkG3y)I@cj4P2?Xwo!dlxSKSR`HQ{R(D{HH2y?*a082-G zdyuta8?&oTH>_+{_$y|y5=fH4Vj+!uY{+c?Yz(vLT$JwnJVaRwUO%sN6!=}>nkiXf zmxgHHS=HfcP$ugO(?iFwf#S7>WJ1U2DY=(}%9Dpju1@ODqx&`vlY3J_o*7mfD~W_4 z+XaO^0&J)`VxeNiRN!2?wpCqfAS>Mb>^!zME1@iO@T(F8sRXh)GYPgVidlj_a<#R- zNJ4%6-%jgq_I7yve0}(R_|b0j%2^qrM}GTbUS6}SmdHxi#0F#`=>o@A@hY=+ewp(} z8D1b&yi1qCnHzk&negiKlZPK$Lec0D;yM~yoLlHyJP@oWENHC&`T zOSni8yitkX$UreHwd}Dm{@q>C#8f>n;KY#KAm-GZbRN$27@wK3P>Q!(`)UXij3Hki z;nq{@jr^jHu8<0z2!UcYnN*f)I=R>bTal4J(Vh{E9kJTlkxU7JsbQbSC^zjvUaIE4 zxP1YoevGrYs0#0&=Ev`LkplTn49n;hpEo*Y!ld&w?j_<&8$b2j;*zsCW~+HAqE_Yh z&?Py*Ne^@CLD^0$VL`f|XPp@-l8Ks}Ndim9ai`^?e?>x8=c0TgMu;XYw(Uh;QJEYV z@tjZt!~LP1=XZ+frA3oIdHTH3GM)5{^OOr-$RGra4z1Y#oWjPPR0#sgPCrnQV8RhM*p=;m=#s4Z{ ze6Ds&w`0^r6N!lOwh7av+5CCLP4;B)BGv#QEw{M(mVE8h%sf8!pPdTSi^b_pKuHh4 z_znGBG$_^+^b#aAJ358SlgqcXN8sGGA^J5+pQ1^vMSKm}P)#c|V#ZlJHz>T(yyM;q z5-$)xbXL$4o6Q_gp}sI*zQU>GtjJirpmqGA;T8Mr-jx@#U;Amwg?!0AhKLq$MDDFu z-)QFeq|%VIU(Yhe4iF_dcWEjit?S}y{5M1|cvCFE*nxf4=f10rXQ2GAvZKC&c~xna z$8;qsFa?c)Vyn={Hqo*(%RUxa8I_MUheO@cBY-yvJx`aTRqc*ykxlzH;6_np(?is= znEzapbpcF3*N_mDI~-eF+4OD`NJwD^s9ZjO{LW&3KXGl8x^$8hm&pxGk zT~{tReBlQ0ajv1q34~;X-1ULkMe4-ga$}&Yu7^K>O^H1XW|0@2h$Oy$7fFhN1NA~IWoC?E z0`N%Syu=!a6KR!+wlp(MYc*$E-+IX(DH^mMi1MZ6xjIFbeRr9Kq_M1vw?TtyOD?wP zk8_-lfm*)U^C~DYFpt6O7%N<@?9MkqLi7Qk+jy$8DWI$gVvCR8-T95XwQuup(O+BV zDUQ>fZD|F8V3zFGfv~Az6HB%H3{D+z%dW?M7f)tmguWOyc}xBqWvD|t0Pp>1&a;I_ zAWPIqjd+q>AWjrJdgFAJBvH=L?_bOE@wlV+l=DRNwf}XMU9Hl!EAu-*cB=6s$jZ?G zlG{`&uZLZ1EVRZRZ&)jlw>PL|w1PagtOmpWEN5HU;`cg#XO6{~-yhj@au|0Z8QB@) z`2wRa7S4x6)7-GeJ3-kQtTdtN9HrQ|E=u(MSJf}fHzwhssGKKkjp| zb&!}^hG$X@j6xo5wp7#T49&-ywM-jDDJk3F1U8Q12P(~8cX28L6>D!DWJ*IHiU3H%}O z5UblF(XAqyi|6YZ-LZ(!F-eYtMw^BhkLTy>>+9cyNcXnUSA{JY&b|{mD;Tuw`YN!I zwNoRiNa3n?%(fUgif0pKkdGqncQyuWx9rP`zzV zi?@dDxvjHd4{fsKK7yo%8GhEyEK@zX5#~lKW*bZzc+k(2&_hfZQx;htUW($rm~W`H zSgGrF^vY~Ia*)WlYNZOv(OE@=Qh1>eZNMnkNbe~6{7*+0KObFovxfOaSr-A5#d~on zh?Ub;q5Y&Lv3V{%AkaQ-qT-C<=5%O;3VBT$+(SRXGnA^p$rCW`J_>(W|8sBQE^y7$ zQ92*25Kcuz;c=mRqO%W?kN1CW8M%RwnJJhrx++o65;Y0BW;r@|2)wZZl?G!&-{X!>u2*MWcf zv-7;uZJ0^swFDPA8YK(YMsI<8DZ04J zi5TO=xIvO*G4-hh@K_O(O~|56G@ItdGBH{DU$zSse(}$iJZIEOaap1FQVN%9CLhTs zy4HP2H#OU9NnT&OEW4_k5uy{+ub6~;5ihEeo_|-~E|d~lF~gWmR~1YWZKP}zY2WF9 zn3n?>Fa6!7Mmusol-y+4QUh*`j;SS?YuaT)Fvqx4LVw~ zS%<*nR%*L^0Mm<26S&<+9G6VF5QJa|*wnQ9NW!cm&@7NJ7(bh#9Q~f**p7-c=omg3 zb?r_R;?bp+7~?t7#(oH6&!(&~V({P7z!r?dQmvu(2Aa#!XT0sBNfCFlvGDYJA(kf$ zjJOt?7A2qkT@Z7qB7A%jU_%5#dXN*PXP|u1^Uy-9n%}?O&-r@!$^5#O)@XyPyug~W zSpnn%B2Er-46rbh`&i3H>-th3sl?qzV&pez|A{lXqnF>0i(E%Kb-{CC?B8~$U2e`p z1!q2!W%RQ2CBeYbin(2Q?o3*R_|H7)rpaDkY8X{s(e$pqQ z{v_gx)-yg(OQ1`%V_lc|xv{twhk!l+T{(^`EAdNqoCvq)7mNM970k^~8XXpVELQ3D z+8Gje_x6Mh#oISVZTA_k!1x<@Fz9e33YY7nDY~{c8&-!hdzvSnBQnfune2G0X}kgm zF9ut9|8h~UX+1|BQi#87Sc75v@|BF8g#{M7GWrne`x!TtyODYZEv#M4e>ued$jzEn z3;#OESAKc*IO*l2d%|35g-xPYC%d$Uw@0g-d5L+K%+Qt#>HrcO(6{t6R|Ti zikNNg^DPyj)rTt-%?0s3D zM1hKs&NbqXZXu4tIPLLb^YcxkUg**fMPEjq?-v zS*<(zDk#UFkjcGJiPEM_A2-Zr)kM-)s#%>mbjXLi3K*(+nyD*Q>+Zl_*Y*_s_5Ni< zyLv9Hrp(H)U33AbH2Kk*mJ5!3H;pryB`%ah#Cot@@!=DT1v&za+eRhTEMxx?MTGKp zbSgFzH`qQ|KuJHRCc9kOA!BHYkJa)amWeCJby^Vr`6VYuW5Ay}b*qJ&#pz)%bBPy= zORM(0kjp_Gt}kO|sL%4klt8D_Tq7E>6bUK@B_DN8Y1F`qz3j2+7vJ!DkTt1~C)D^- z`WVhQE{yx5?^*WnRUqmt5Y7zNX5lxlcoa0t$Y@wiSTuVG(qp^d{)AP!w zRrKp?&5a5X>&6A;8c4M=v_o|khTCbu10oU8E#3kF649ZTl`EynO|bn`_5zVX+IW~V zPFGVj*xxJnJuJ8cz-b8i$@@v9;nk*$oqQ7^R@rbIKFT{NPy|VN&zg_oBJgk_8Zm3aoxp|R z_rRWuEz4Xnx0@i1ZZejiFJliK7o(EV#$Muglk(;)IefKm1@W?6r$kika)^)jDHKy) zQv=yrYBzpg))ZJI0@C4Gdr`kffXmWjs1@sa2H*lGp%J3wnRyMp4%gGB+PD zIPUb5)`a?$-dK6sm$Je2FmLJ#%sw1YGFA5RfeqQm@RKK>9+;C`oIO@@`ON${BtQQL zze%CER3ssyl>8!v`r3Yv@pD=Bv`Rg%=l>3G+aRu5W+YM|dGMa?eGBCN( z5-d1rnz+zs6y=V(yr~>#MDoJ-E_2q#jm(~mM7y^-q_Q1p6o@zZ$BYJeBx);5P&MM5 ziS|Ctwa!t(?MnTvmjfPW{2&d~jQ#DktF**{+-*V*a+7KMWwaDndd2E1?J49tjobpRwnATEL&rVpyq=OKNvF!(2e{qC2_c)jvK5CnjhzSX3c{3U4qmEkv{NH z)G$K(6x`L>nm|EkyKKk(;qc~_{U6iy^re<1;Ae>AqAT>~%q8J@G%0g>C!_uMvRgA< z7dT5wDrycz=;r70-1;q+{g(|QfU6iun9JrE+??z9lWXkAa0m%(aAE-YYXEk%O%1Oc zdh0Lxbcj1z@&`z*3yHWm3OO%cxT@mg8^j@@n)b+47io;RVSuJ+Xk3@2(sg=3F4^{V z7s#$D()s@^MrctnQx(nM4#0-5y&?1Z>fV+0>bXG6icr3>0fXKa>PEFCpXj7_=o#H&4T?$;hl>3RHeqy|AZlb#o($ z7rRfQw_HrwvMi-ATEzl7H53*yw?von@iTLw-Vgs1%R{OEujA_y`{7|PcMcnA>+&?N z`BGeeSz%m;fyvI9o-r#o%1(GXyI$sO$o>u5=mV%UOZZ{F|Ct!5|96g__sPp*5NT^b(J*RW{s3^`Xl^< zqW`GD=fBIsE5}hURkp}lJ0DdK&jA;|EobzV4}B4bH`P;i)U*^669TT+8W`zXtZcOC zsKyF;6W_@6qVFa*)20o(@+T07GCk-r?=>d8oJ))Y&C^FJg}pS`fsBYI0HzOAW~o55 z_6da+qu0*<9zBB`^_YIx0DO|2fQ>01Z6qqd4Xmh&Un)pB87Ot!xrl%E%n^9`>qd&?PJ1A%2H-dL)EI-1zF{!TAhPZzo z13!O%8SZEnTolbGVm+s-gwrQo3ctt*K$P zQ`Pay7zUL(R~Q7Yo>jUnttF&SEpSlV*u)T-w$&%l`^?NIXRN}QmJ>xP$ zXgG5~eNn24mOIjEdAA?<%+B{DS}@4;!66|+MrNeXZLb?KOknp z`NU~jid>g2z|*NmL_TLE-@|Pmk*&6=XLSuM_rHGhpP9G zS)#EazwNm6rop<*j%%Eywe_(-&PA-0z_;u zWX1-5ewRL)GT#`?>x&Q13DG8ly_^J-kckG{@ATsS&-b}bfo`yKfdnwde7R`5H)!Qz zbmi&!p6*F^Aobg={diT-`YAp=6F$-*4K#3UD@@{OA=0v1yp@R4dB8J9b|i$)+4)V| zMy5qW`ZvC!IVm_Uyk+-C_ zO`DyXXNGH5xEGo5QWLcouxnq+?dvj6xZR$fLYMv<@yNvjoe64WM2|x6XML8GEX@UY z!)5e=B(O(kr6!IND?W8}c~@NnK}&V|o7e!P**Z4BQBvn%xEXhIIE*s$yIG|u4nZMi zusyE#C2GCq&CX7Ia4Wik)HKwYeo&6og6{9gg}z6QNq0=HqbXn(<~4{R&(+#~!0CUM zpnyVrrw=}7&0QqqJ+l8tD4%C@G~*`!zr=&tP{G3e}EtT_v_chM;+NtVpYDji$gXZP~=OqGsOtE_V94gHe8kD z(O7pE#-qyiOF5Jx1LJ)?GcI&3FJla1ZRQ24g;A@0Uo&&9GQ~Z~a63qM;2Y*R(lvkK z*a8xLL4cp+jaqW>5|zHQXQG{(gQvmc=<{y4^S2}avpk8=U+$F==qNhV2m#rPjODav zx+$dwfsgK$IYz3_2fyU90=k@v*zETqrA0)fP_$BT1kzP&ifY%Gi?R&f{?u{i-6CmB zh-x&e=$vVW$nTK}x%flQh|3ZQLiZg>^((CFQMDaxEju?H@K;HB*=zH5dkH=M*V_my zR=UBv+)5X9a^&((#@y%nzMap=<26C1VOExV3JgGqSw%D;_K;VztU!MY*+_|w)a<+i z##4BEHXDDTI~7W&8P*@XV;6p$yv<^!)Uq0~!sY}>#kNq<%45%W*GAgl&w-B*M`pwL1s&}30cHG|jSfz*SY-@KNwdb(E#3F=Q*-{}O)z{ax z@ySFA)>1|NOzrs9SAgmSfK0mtW-dsJ>2rP<*!-~vgP>kwZW@BKHCRc(5jHRsi;Nyp zB7*+bth&*MW^T57y9tSx2|pQ#d-9`bWz`I2{3kBTOfdC9xUx~9-2&`zZRoinq_pv} zDK#lpaR;>XBZRRA4r`|%9>yP%BIw@2IVi!B*G8>ceubqW+qMtIv7^HN*g)^X+7rYB|0L=BW0W>qf#^R=4>Hy{}TG`K335& zh7OI2mD0+Hv{%Qb+XZ%G%z^$>KWbeRfRt14Yu=^6xnk1(c}K(mAChhO*Z;8q9-Vy_ z5q9D~zyxlYO?u#T4K^^Z0nd=%^JHOhzVr%2QM|w~*TiIHh0>L(xlyd9`l*37MzuEV z0Qx`UP%@ltgam5>8{zwLmE>EWhV6pN5jlT3v<DfE5oQHNF|F zg&ilZo%?z71K{mT$YA{%GRbAJAi?`=tjB0Stx%~GGJ-QgniG<(jrYcF0T{3`>0*@c zM{_lAL5f%Fb4|-W?Ts+Ah;G_o4h1~GkRV1f>41$$1j_Quef|INaiS6g*~he_>OGG> zD=+ttRtDQVhp>?D_H2U8U~Y6d@k-*ZEhD$!uIZ#Df4+RuqNh5tMGrt4W=7~&1DwEg z{gIlIZ0-0d!sljpa=Z~4@J+U?=9BTbo-^ri6UaIHfCY+_{?g+HfChlE^lh zvG-I8n$KX@{2Pz$zZ1LYXw#E?D#&opWCfQ0ch}-NHHjhmU2P4|p+#FW7oxqVRf&<)!Tc8T*Eh6yWm>-7wS+h1 zhVjD!S}kJFv{Cata8@-8%f^5_$lV_;7s+x0E~J+vi`Xu1^i4Fx)f}(6P?dY}nySIe z=~wT6|Ke>2ruFI?Tg6}3E<@k~-B)Y%hqsAT;>W^_UhZ$pG!(3FYnH6%#Dpx27%0RQ zpi?9InoeI#jln1>f4F=rds{_(&zsd#8{!91pF#=>TiX6=?o4b+m1L$XS6N50qkCfG z#JBk|gP>qUT&d9N@9I}?+PM9p$H$y_4~}lW`0p_}6V=e&hO;975kzM=>jm8u*&xqJ zCwI)ZN4K1R`ZUzeYj+h3O8QZN^{r@A(!$6bnK|IEpgKsXuVMhhI>92IUn+C*OO7!M z#(ZNH=1ORCS8n%R9sEh?BMS1?ykWhxCM6)GPt|DJHg%E zf(Do1?gWPfcY=iw;2xg$yFXdO%<9vhJ z#DtF)8V~8P-@F;UR?R-eKv1D96jD%;vwUNQX1ie3p)UgV6+mFm6lfFwAmr4e=8#?{ zo%7l+7Dj4rV<0Hp%;ioj@UXyupm?>ywn1%&nej-!Mo3W&#B)y&-Qz>oJ>#%RCB(8Y zuAmpzkXRFCeEu)BW2q6_fc8n1Dv`ZBuCHYUt1!M_!Ln{5#6`@!h>QQSTY=)q9k_8zsv23kJKhg=*)M!8 zjpKVQG_!AlLLb3TWS(aY7Kk2>9Z(Jt7bj>w1c@EANf3nh6K~M?#Rg`v+Wr@pWuvL9 z3Y28@P1Uq@%`kEpJoQ;y<~qw0=*P%mwH8&S+U3o(DFl(k*KPc(_$%m|KVctq&Ks4C z3zG8gt3H?4z-{_xp@igVo;&D!kfIqIK=c1c{c;os_opQ{K=45wJk*e&nTY9VXKt42 z!Qjq+W~VDA)Y}z|im7;yE3)?S_$aSJjL2N=D^^7o5W6e9rbc*wwv2oJZSB12qX$c= zPgpZ$)R8?;2tiR%mb_Ynkhr>71Y#VJHei2r&_1M=xGhD0ygQHhfzKNu7z8b49S6Bb zZE=0rzu>PfcP=Mi$V`byCYYEvKk;8-kWcktq=}y$qmfwsW5^1=o;G9=xo7*|c#dr{ zo+=OdTUFR)*dQD2!x33Y=$3Bs*UN_VzT5VuE+t;4ja>`{%%C$Cr7smjSZZzi1$np4S@D$&+>QmJj936i|?~QdnD~ zpDyMq&!#$%tv=Kw7j}k5Qe}%)Gw}4sdz)=$ULosaX%Z0~yR_zBmobs0tazR-*=fPN z{h#KcOn0EWue*CxAY5EG|}P)j#s(@54wg%zKTX$rH~*Ld~|EW z6VJdS?Y_sZzJK#%|F(Bt1m9LBLv|f3wgRkNYk0?SlVA;JQKyOS4F#)0Su($!EE<$i zO3sbBB!w*P#|dXMa34+&rW1f`w6=6KA7<>CqwR-rF5k?qwn8r$Pyfwdwfok+2w5Ic zQ-le@BSMFb{knFFU=I;UC`48>s-vKZn^_`1joKz;RQDv+)Kjx~X^AkcE+1)^0kuNS^RBSnnx}Cf-6J(q`FZAsa%wL15V{lxwY6p(H`epp~-$E41gbSa8-RNbF}j z_N5%|!uFyr+=l^^X~20fDUcn!8XWpUfQ)gv?%SDh&`S9vy(SvRk4=tWD-#R}gNS{c zsB$)0v0Ic|P%#2SVVl6d6LoV?3O0RQL_azvliU#QwcEp~ z$%o|2b-oG~1O!1YD&+dS7v%v5%fl{MU<~xvz6tqP3YP7-Z*;sfRu@Ba4$8HDGCvYo zno$l1ZJR#Lx;R&#wx(1q(?F;Df}!US70SE{^+*Y8*$jpFRBAw~3l3i?8Z|ClLcj_U zHe#hfv*_!m)ag({tJCMsOmlR+dQ}W)#-WFc}LZaS=4vg#7HG6|8$5 zFfJPz=i(3Bkl{q(9lCsR3QX^d1lbId_&R5;G*A_GQ1eN|hDp)e-oeqkdKLdx7#~kZ&ZXoz6cnV{QwP7ybTH?I z-d;*4A(yghp^7m^mCVZH>a>-qZ+vOc8)xmaBE*3Ok)Nmp;bTQa>Hf&pApoL&XQnd{tXnFf_n(g-to))s!{KMSum=k@AFu)s@V2O zar$H^lV&wf_qw~6LhAQvkwvAj|B7fo-p05ySR1{|FSDQ5BNmhjNiG(SlQ7gKinnhk9ImdE!4qr`N7k%w3*nUsQX1TOiuzF%U>{{diD6HB~kP-u}H? z07V5#dW53mu8hjk;lSc*)T~Z=^vSVzUrdzQJIULqCdNX}6E7O-m_-^Z>?Z0pg}S9N zhKaJd1iy!I5)9)3abAz&o{`S^((dn%xs$RGko3z3(j%Y-Wy<*c#oS+h>5{nOuvNvP z*jDx*QR}MH7Iwwl$5W)B?yG;6E}p2Eimz=j^b_DCbUaJNrGJt@yXGF1%kP9rw*)mn zW}JkVJNXXHyZOwC3a@f-Hr_LTsbmosuZpX}Au@s1$gk^4XD#`7LN{kt4ZJ$qE&q9M zco`U%%I+ghrPx?}(!jUu#cg>OdvXhB)l5AC>^!(T@eY2+tvve>{6_1<#pb?C%acBR z&V4siP_kO9{AQ(g1mV4O525XHwp<*=3~j3t&MtDl7^U3v{CsC!$5zneuQpyQwsGGw z$^PZGnDW+7uKm3q-;NP&Vg`xlaX(1(p?o$TAf))n4i9Uv&M6JMXFZlaGx62^nyJen zxKfl(-!dcT$jj}0_Eh>I>zGiOK&EGsU>L==tgm5F-Gb=qyZ%ERcu(C{Ip39=+X|FV z;&nRYaVB_784_&L7Jf?ITg2jNnr>P1d{K%dNNrw1`Y7Wd21YMV_m8twKhuKM zmGF{%6j9AO8>yogm==h+?Qwlhc@sQrX=>FD(24c1Ng#(!5y%`|LBukRuhccS4Mo=L zyz0q>SK>#nO&6V}(3kkOF<#3CF7P?@42EoA8yOvyk(Q>Vqhm^&(BJ-@UQ|@{!ABYf zv746N)uz5ptx5fp&kF;Hy&UobBsv5oefZcW&Dk`+`E}VF&uzQ6rDn@*j^u;S-2yXI zsJLc~TaOwcfMq0v#I z3HNZd6L>sV^hH^u!>FNe-u0=@3=BS`6MY&tOBCki;ei3^oguM)+ns$qpWQz8#-YC! z2!a6NtP7CncDa8*iUEyjB}r;Pd}4ua{_vRo`w74LXt{60GK@|w8qdEIEnX$zUaYRk zt&)RVN2buDW;~UCDMhbV0Yb_A;3s)}`&`Fz?2%5He7*rOp~eWCtVYQeZVTb!c%;ZJIgXo@Ljl=dFF(zqk$<)wb&M z{k5!Z{IZ7@SlJr?YI?}j(CsoDgVSux!^!Egkn%@7GUK*AUaQb%ZS zA0wvi-%A(HIb2vcz^O)KaWHDcjTNczXDIpZMO?IeXT`Cb(MK4(&3xWAv%1oqrhZP9 zt&(RTtkg_LMqwr;WFGC@%H=IDK__pNd`_SYD%;kIA1V~OfMv8m&f>)v5Zns-_3{+N zndj?c_1xByeN+0Syn~XNmv7rrlA|^%I1>c~$s`6Fu9(}$+E?k{SQy!PZNGJe0z{v& z-_0qwEiqP2#_ZRfSYxzH2gxfYSO6X>a-@cRoPT_`GU(JHLMm> z#$&T{;g_}y0=iOS;YEl~+6AOQd=rm;4Th5a2_TT(XW|nZeg|ZY3}hagG_@2rfxI@R zufbKNS9e463#}FX4W&xukWw*r=N%a%liw?#_UJ4l zy(z(o)2r&^FI|Ja7ZPM9gH)Gx3CJ8#?WQ2YACb;csqIjg5B<~L!tL@R)fnY4&Fo5f zxkPWLxUjIWLPPzV%Zd4%cAt(4uG|DDp`wrq1(Gf<-V5-$G1h%m&Ff0O)!Ye*i|U=IJVe4tXv#H z^0(H14zt*%6lFp3PXa0ptCQL(R^t_Smf9uTV~x>AwLtuH*4W1&>s7fh*dVW@vl?-$ zu&6J{32;r-rcR_ST?6+!cnTjfscxv5sYPTjs1YBR`gJX=!CNE07I=`Q-i)Po!P4?? z*YLH>Zsk9i@{sqZ=g+g#t}T#AT6fHnGR5rHc$SJFTkq^XvJop%`O-akKRoG?qfrXD z9naMpc7d&Lm(-O%DJvr>d;WU43VcJL%bm00RuX-=i)HORZs(ddgH%^nH#0MnENvAz z%5`0-H$(z9y-llth)BRuo~Ova>+iq?Jw|4#h5gP5(jarX!(g>S?!s(+<2+1RPpPR@ z-jeN}&$EfHRNprVSQ?z7)vB>ieCjw`tV}97&>7e-c!|Wjn0qn?JJX`e^wP=CxWkQD zTZs~a$~ul%B^5hOy**fM_Vfy8(|=-SeD*OcHt}mO&TnL)SIr~XVa!!qUij~E$@lNyh27gOJba%YE_h#*8s1El1TR`< z10I^WxVS~jlv)uZJaJiVhcg@-dP{B;}~-0nN?gd zzd#PNw&VKJ`t$^!z|kdx`R&rrAhm|Bzg>tkXtEB+2m6>68ZlU#LruXm{*ph0bJwg$ z>k~l_kTbV21=Gr_`$u)PHX73RA8wNY%4uoJ*^T5UR;Mc#3MY|_YkQl%CjJmxzC^6?_*?PZuUTx>I6a>CL zWf%u!WdWhOP^RGfTZMQuUfRqf=G09f5{*p6Wq-_$M)xR~S`J7=6%`dnYXN?K|E~AG z-zK|Nl$V1uqAgXgB9RSM+=G8%&it_B$1_f2lPp+hwuu}_Dz&*h$iVdw0pzPkK zHL&vX^7H{;r_=|gWIikYaK+nCaZ!6wi7q+^sU zEtrE~VN9B+X2DCDB_UeUBW&BrNFYih0K?FPuElDWDU0dyy-W`#(zd4C9Czwd#fNTZ z1h0Un0v>tB`QjG<;m0M3jAcLh0(PFaJ%2{iMOf0&(&qd99)JI$jZO8kP4tHqAn31U z0`Fuh3IYT`b{lOMS(f>#@|rcvk9}`1aw-4z=|tC>Ez!98uKceA0njfi2!%s)*y(*a zsVH#Z&B;@eVbEkuOJ~u4Nbv0b6~{Gm3?3EseGvMy8`|Z0<`9*=uXetg zjb2~>m+a42>!jgTUfH zbN&N)H09o}2o0*#pq(#u4W9AKvzPDvetC+UUM&vek`BrFVK2ocA`%i73<8%mswKdk zrWHx|7_rD83S6Kj%eBJ291&5!fGyKo5pCr2rv9~&&uQzMDlV@Zb+Eum$hX^n5AMmx za<_EF+c@~DtRmnNXC*2x?_|NV7c>+Dil*K| zKH*Cy0?yPU86@DovEgv7(hzw2cY82SD&%!tmSHr}>J4lXYIbX2PdR!|>UZyW!PmK` zP|KxAs$$ExD+76f#B-Aam}5qZ`4-=L&3e-4zTB*7kK8$* z8nPcy;y8-Y{>;ApQxBYh;K^iN^XW5Nc!ID_4YF;)c z21$SR$7%Z_uhq}OO-8bM#ZM>hss0)b>72R9p)D~g;C`@K=4}3as%lYn1ia+Ybdgdg zO$35~|M>J0t$=)*I*@WBSuI%+-IZmStwM)vIqKd}W|9*!Wxm)@nh`e3Qxc9oAV49D zju{@2`cW%Po`N&x>$-iExpt_7@lcis6b~qD=T^f2JoNF*n z7kmXm>u&2RK)ZObWrazr)@!wEyVdW>MKU)(Kj641GJ6{QBR>m(aR3skGzdvajoR$i z8UkO=q)Wc~K3@7>^{mGJ#xrmlAp18!mMTv}x!&P=1du#egjAo?stQuS>j5Cdi9w{k zQ__l(s&@lu0oUivv*5$5tgMTTcHativ#G$h$G}(%JqC9mAl|ozVXq%Q7a2g7UZ1ak zE!x1B?Em(>^EN~$azhvRn@%Qy_WfkyVVkkV3FERa^=%P!W9TKb##I^2AP1B#yOlI2}|(#n!$SgQ~sm}5Q2m_i}g}e(CKhFht1~0)s0+OcA|e9<=h4PJhJ1|k2y zClzl`1#jM!g(CM$>S)A#Nd-ct9R{zHeg7ugd++N&*E62IU$U;g{XzxPQkE?NyXNve z6ZO8FF4w%bA-XO*6=ZMl`u+?L;~5*&EDz1prRud<%>#cCOJRVJQBdl1z7AI4_yWlW zm~)FbjQrP{zP~lYv3QeJX-wMrKoGn=IKDmno@663dpKVM=S2&UHgKc z_E5#rT#WmGSMSsNc=)0;yQ!eeDjOPyPOet1mk>z^6-yY3ShQ%9Lmh1JQu`XU{_IIv zYEfLfy&gS!5_C>IPaaLcwPEE3MnzuDUD*YJ^nEzpKi~WN5Vl8ag|Niuz?J*byh%!B zL`6_gC}B&+MW~ddNU~0NmvPiwJCft)cA@;(%H1M!=yIMq9xx7=3?KL7SpUT%mOck$(NXtGprBPvU@cZ zIpyi+cAuKD{#hgAx|*_m?TgN+(4D@*jVh}Cyhz6L>g2>G+U|J< zYZ)8_ds)31@o!o|DRvGDatQFGUdfrGQA5TnaRJtu4-Z1t3`SV18dalKwOYbit9+ea zLdz+)WfUe+${}_~b6+3Tj_3BumAsBXns^eHK__mqo?3fn+#bA$OwK(%-bW!O)reJSEP$PCusEzb`)FpgEG@O|6Y0KTKc0QX{q% zG(&1GUA7>DXy(?Dyg-LpZ}Jc=<%fbXWGFWwNUT3PT2VI$LyPWMoKJk)hS+{?vP>NUduBcT8Mj;Wn;ovR z`NBWl+JK+1Eb#ZZKV1&|HyX&C{zs|em+;oA4Z2 zs9*i<{kr;B@+ax%;p%`BnNEwBfq{XI z7DIE*(d~3*3awsc&y4=uW=f=cECpS~9895Pkgdv;JZ7k%f}nUOc#HZ%gP>WYb!w{U z`35f&YT4!B2B|@EXmjGF?vk(-XBZOw;$}J zGNO0nCR{c0z4-KD%WYl?PqRj|ER_QmBk=c^g6`iFOb0G&Sb;Um*;!d9m%PaKwHl1! zvWB~l@R=n8yNVArn%?1d7f~`g{k?5#eFyfeTqZ6p2dR@CA9Md~>pSJ_*qdV?_TWQo ziPpKd0#UG3orVeNxz0i>Z{Ph2(S=-s|{7o&S75qW%(iq&78^GKs zmg{@jQKp6fl9rJH5;Gzo({au4nTezy5~s5o%1fFC1iU^S`A02@bFj0M_u7r%->9EC z+yXKf2t>(P=2F(QTC01ToandT@b-RZp&p@EJN}7NUaMlbqHRm!)vp&PH>M;jQd( zC@Z1%8^( z#6#4?NTBlaa+k;ZU^Kseg(J%F0{@4#VsWvdNV0%$zQ^w@=H_jHc}!z=3Xs!o9gP7I z2-@-unYqpi#ui}ep@aq^s0<4A4EjW$&xqr{9qJyiLc@ht-SvxC=0>CIFhrG9>M^WV zTg2~rt)r%Ba!ie^=vEQ>T=R5 z!I!~iV3rK&(7~4aM1D4(4+~8ZSRv2h%z@uN`~Dp#dvx8B)J6~GP6we@g!CQqVzHT& zRsk~2chRz#P+Xu^MQw=iaU0;KqW|{LjQ#JIwQ80f+JSO0@T%u=+jUmh^+CN(3sCyR z#{)y6JOPE6DiOG(lRt}kd}?Y6_}mlFfTyRX#&X#@_Ayn}-&O-(R^MSm+t{B+4l}v* zy@V&hO#T!6F3udd=*oMFKJ9;b|Do5H=Zy=Gt}Rj$k{+NIrT(OkEmfmc=d-b~&3mMg zrdIqwR}6siLpYw1Y)Yvto8B&8h(kc4LuT zR(n9@Hy7sX7!N2*gQgRmYUJ&@bj+s3j3J9|2KUUYq<^K(l0w=R=mI_i`k;}g(4CMo zF#B&n2^|0g;SkF6036xBVYUE@wF%(gWF$rAC(d>H0(wfBPTT|lJ??#i00|3^MUPup znB_z_lRu`oc}Cz2U=PU()P&DPk)(P(KJM63by~LO=8`EfXsD<$QQclQKWiF#|JHY1 zVh;ZS+7l0eaFP#r^W>}ipC6v!zsi@n0Fggyi6L2z7va#V_g;5u)#>r@@;;!wU8Bjg z2f-lzOW?@q$FKg%WoN%-ye0z*6{mq#N_i{Q9#s;fF~tqMZiH+hs?G5-g33kRzCaqf zi1}zuKdjoSR-X;4(ePA6;wa9`)nD{;=$UI`k0b z;K3p~cunFy{&ml{Fu_MIQdL|rKv5hcq>&}wqAfmRft`rT zSHR9awrNfpV(7y|U*H@G3s{GArrhWY>>G;$G+Cufy>SuRK`Srz7)r|D%gi7#+xIR9 zUre#_>+g(W1jqIbQ=D{!seld{;?Z}62UsV`d;r%ipp%V`jF|f}@LhES?dbuuzakbg zn-1;%@~(SZdC5blR#(g#c}nxR3i)u!a^g#p`^4@f#28c&J@V> zMid`iQA7?RMCU#lJ-;nbe&h1*KTcf~pGCHdRp+GdcOhP`S$5$EA5x#7e{~^Xmt;Jw z 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 {oc0 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

ql89520p@-sM} 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 Hu0mjfNW22; literal 0 HcmV?d00001 From 8ae57e8700ee996c3db56be281a392f6f2417d64 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 14:57:39 -0400 Subject: [PATCH 08/22] updates --- .../sdk/authentication/additional-methods.md | 72 +++++++------------ 1 file changed, 24 insertions(+), 48 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 09d4fd35ca519..6e913ae42724a 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -135,61 +135,37 @@ The following screenshot shows the user sign-in experience: Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM and `InteractiveBrowserCredential` also support a silent login process that automatically uses a default account so the user does not have to repeatedly select it. -To use WAM and the default system account in your app: +The following example shows how to enable sign-in with the default system account: -1. Add the [Azure.Identity](https://www.nuget.org/packages/Azure.Identity) and [Azure.Identity.Broker](https://www.nuget.org/packages/Azure.Identity.Broker) NuGet packages to your project. - - ```dotnetcli - dotnet add package Azure.Identity - dotnet add package Azure.Identity.Broker - ``` - -1. Get the handle of the parent window to which the WAM account picker window should be docked. +```csharp +using Azure.Identity; +using Azure.Identity.Broker; - ```csharp - // Form1.cs - private async void testBrokeredAuth_Click(object sender, EventArgs e) - { - IntPtr windowHandle = this.Handle; - } - ``` +// code omitted for brevity +private async void testBrokeredAuth_Click(object sender, EventArgs e) +{ + IntPtr windowHandle = this.Handle; - > [!NOTE] - > This example shows how to get the window handle for a Windows Forms app. Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window context for other types of apps. + // To authenticate and authorize with an app, use the following line to get a credential and + // substitute the and placeholders with the values for your app and tenant. + // credential = InteractiveBrowserCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle) + { + // Enable silent brokered authentication using the default account + UseDefaultBrokerAccount = true, + } + ); -1. Create an instance of `InteractiveBrowserCredential` in your app. The credential requires the handle of the parent window that's requesting the authentication flow. On Windows, the handle is an integer value that uniquely identifies the window. Optionally, set the `UseDefaultBrokerAccount` option to `true` to enable silent brokered authentication, which will automatically select the default account. + var client = new BlobServiceClient(new Uri("https://.blob.core.windows.net/"), credential); - ```csharp - using Azure.Identity; - using Azure.Identity.Broker; - - // code omitted for brevity - private async void testBrokeredAuth_Click(object sender, EventArgs e) + // Prompt for credentials appears on first use of the client + foreach(var container in client.GetBlobContainers()) { - IntPtr windowHandle = this.Handle; - - // To authenticate and authorize with an app, use the following line to get a credential and - // substitute the and placeholders with the values for your app and tenant. - // credential = InteractiveBrowserCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) - var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle) - { - // Enable silent brokered authentication using the default account - UseDefaultBrokerAccount = true, - } - ); - - var client = new BlobServiceClient(new Uri("https://.blob.core.windows.net/"), credential); - - // Prompt for credentials appears on first use of the client - foreach(var container in client.GetBlobContainers()) - { - Console.WriteLine(container.Name); - } + Console.WriteLine(container.Name); } - ``` - -1. Use the broker-enabled `InteractiveBrowserCredential` instance. +} +``` Once you opt into this behavior, the credential type attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential type falls back to displaying the account picker dialog, from which the user can select the appropriate account. From 3938aee9dd5354fa6a9c9c80e16b15bfbec38f2b Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 15:38:04 -0400 Subject: [PATCH 09/22] fix code snippets --- .../sdk/authentication/additional-methods.md | 72 +++++++++---------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 6e913ae42724a..f5fac4ba1a56b 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -102,25 +102,34 @@ The following example demonstrates using an [`InteractiveBrowserCredential`](/do using Azure.Identity; using Azure.Identity.Broker; -private void button1_Click(object sender, EventArgs e) -{ - IntPtr windowHandle = this.Handle; - - // To authenticate and authorize with an app, use the following line to get a credential and - // substitute the and placeholders with the values for your app and tenant. - // credential = InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) - var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle)); - - var client = new BlobServiceClient( - new Uri("https://.blob.core.windows.net/"), - credential - ); - - // Prompt for credentials appears on first use of the client - foreach(var container in client.GetBlobContainers()) + private void button1_Click(object sender, EventArgs e) { - Console.WriteLine(container.Name); + // Get the handle of the current window + IntPtr windowHandle = this.Handle; + + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle)); + + // To authenticate and authorize with an app, substitute the + // and placeholders with the values for your app and tenant. + // var credential = new InteractiveBrowserCredential( + // new InteractiveBrowserCredentialBrokerOptions(windowHandle) + // { + // TenantId = "your-tenant-id", + // ClientId = "your-client-id" + // } + // ); + + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net/"), + credential + ); + + // Prompt for credentials appears on first use of the client + foreach (var container in client.GetBlobContainers()) + { + Console.WriteLine(container.Name); + } } } ``` @@ -141,30 +150,15 @@ The following example shows how to enable sign-in with the default system accoun using Azure.Identity; using Azure.Identity.Broker; -// code omitted for brevity -private async void testBrokeredAuth_Click(object sender, EventArgs e) -{ - IntPtr windowHandle = this.Handle; - - // To authenticate and authorize with an app, use the following line to get a credential and - // substitute the and placeholders with the values for your app and tenant. - // credential = InteractiveBrowserCredential(parent_window_handle=current_window_handle, client_id=, tenant_id=) - var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle) - { - // Enable silent brokered authentication using the default account - UseDefaultBrokerAccount = true, - } - ); - - var client = new BlobServiceClient(new Uri("https://.blob.core.windows.net/"), credential); +IntPtr windowHandle = this.Handle; - // Prompt for credentials appears on first use of the client - foreach(var container in client.GetBlobContainers()) +var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle) { - Console.WriteLine(container.Name); + // Enable silent brokered authentication using the default account + UseDefaultBrokerAccount = true, } -} +); ``` Once you opt into this behavior, the credential type attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential type falls back to displaying the account picker dialog, from which the user can select the appropriate account. From 75862e7c8f9fac177bfdbe03fa21d7c931b5a3f2 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 15:46:53 -0400 Subject: [PATCH 10/22] tweak --- docs/azure/sdk/authentication/additional-methods.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index f5fac4ba1a56b..4baeab4089ef9 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -161,7 +161,7 @@ var credential = new InteractiveBrowserCredential( ); ``` -Once you opt into this behavior, the credential type attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential type falls back to displaying the account picker dialog, from which the user can select the appropriate account. +Once you opt into this behavior, the credential attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential falls back to displaying the account picker dialog, from which the user can select the appropriate account. ## Device code authentication From 8b9f78a455c260ebac48279656852cacdf48eb69 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 16:22:03 -0400 Subject: [PATCH 11/22] add note --- .../sdk/authentication/additional-methods.md | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 4baeab4089ef9..9beab0fed4e5a 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -18,9 +18,9 @@ Interactive browser authentication enables the application for all operations al ### Enable applications for interactive browser authentication -Perform the following steps to enable the application to authenticate through the interactive browser flow. These steps also work for [device code authentication](#device-code-authentication) described later. This process is only necessary only if you are using `InteractiveBrowserCredential` in your code. +Perform the following steps to enable the application to authenticate through the interactive browser flow. These steps also work for the [device code authentication](#device-code-authentication) flow described later. This process is only necessary if you are using `InteractiveBrowserCredential` in your code. -1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left-hand menu. +1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left navigation. 1. Select the registration for your app, then select **Authentication**. 1. Under **Advanced settings**, select **Yes** for **Allow public client flows**. 1. Select **Save** to apply the changes. @@ -29,7 +29,7 @@ Perform the following steps to enable the application to authenticate through th > [!IMPORTANT] > You must also be the admin of your tenant to grant consent to your application when you sign in for the first time. -If you can't configure the device code flow option on your Active Directory, your application might need to be multitenant. To make this change, navigate to the **Authentication** panel, select **Accounts in any organizational directory** (under **Supported account types**), and then select **Yes** for **Allow public client flows**. +If you can't configure the device code flow option, your application might need to be multitenant. To make this change, navigate to the **Authentication** panel, select **Accounts in any organizational directory** (under **Supported account types**), and then select **Yes** for **Allow public client flows**. ### Example using InteractiveBrowserCredential @@ -74,7 +74,7 @@ Perform the following steps to enable the application to authenticate through th 1. Select the registration for your app, then select **Authentication**. 1. Add the WAM redirect URI to your app registration via a platform configuration: 1. Under **Platform configurations**, select **+ Add a platform**. - 1. Under **Configure platforms**, select the tile for your application type (platform) to configure its settings; For example, **mobile and desktop applications**. + 1. Under **Configure platforms**, select the tile for your application type (platform) to configure its settings, such as **mobile and desktop applications**. 1. In **Custom redirect URIs**, enter the WAM redirect URI: ```text @@ -96,44 +96,46 @@ Perform the following steps to enable the application to authenticate through th ### Example using InteractiveBrowserCredential -The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): +The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) in a Windows Forms app to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): ```csharp using Azure.Identity; using Azure.Identity.Broker; - private void button1_Click(object sender, EventArgs e) +private void button1_Click(object sender, EventArgs e) +{ + // Get the handle of the current window + IntPtr windowHandle = this.Handle; + + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle)); + + // To authenticate and authorize with an app, substitute the + // and placeholders with the values for your app and tenant. + // var credential = new InteractiveBrowserCredential( + // new InteractiveBrowserCredentialBrokerOptions(windowHandle) + // { + // TenantId = "your-tenant-id", + // ClientId = "your-client-id" + // } + // ); + + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net/"), + credential + ); + + // Prompt for credentials appears on first use of the client + foreach (var container in client.GetBlobContainers()) { - // Get the handle of the current window - IntPtr windowHandle = this.Handle; - - var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle)); - - // To authenticate and authorize with an app, substitute the - // and placeholders with the values for your app and tenant. - // var credential = new InteractiveBrowserCredential( - // new InteractiveBrowserCredentialBrokerOptions(windowHandle) - // { - // TenantId = "your-tenant-id", - // ClientId = "your-client-id" - // } - // ); - - var client = new BlobServiceClient( - new Uri("https://.blob.core.windows.net/"), - credential - ); - - // Prompt for credentials appears on first use of the client - foreach (var container in client.GetBlobContainers()) - { - Console.WriteLine(container.Name); - } + Console.WriteLine(container.Name); } } ``` +> [!NOTE] +> Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window handles. + For the code to run successfully, your user account must be assigned an Azure role on the storage account that allows access to blob containers such as **Storage Account Data Contributor**. If an app is specified, it must have API permissions set for **user_impersonation Access Azure Storage** (step 6 in the previous section). This API permission allows the app to access Azure storage on behalf of the signed-in user after consent is granted during sign-in. The following screenshot shows the user sign-in experience: From 819191c3e37237ab0ccdc01d136a4cb0e88fa9e6 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 16:28:21 -0400 Subject: [PATCH 12/22] comment --- docs/azure/sdk/authentication/additional-methods.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 9beab0fed4e5a..1d2dc971e9002 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -152,6 +152,8 @@ The following example shows how to enable sign-in with the default system accoun using Azure.Identity; using Azure.Identity.Broker; +// App code omitted for brevity + IntPtr windowHandle = this.Handle; var credential = new InteractiveBrowserCredential( From 5028ef6ce24fd6de156a89198bf94db921dc846c Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 16:29:36 -0400 Subject: [PATCH 13/22] fix comments --- docs/azure/sdk/authentication/additional-methods.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 1d2dc971e9002..564eabe00a717 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -110,8 +110,8 @@ private void button1_Click(object sender, EventArgs e) var credential = new InteractiveBrowserCredential( new InteractiveBrowserCredentialBrokerOptions(windowHandle)); - // To authenticate and authorize with an app, substitute the - // and placeholders with the values for your app and tenant. + // To authenticate and authorize with an app, substitute + // your-tenant-id and your-client-id with the values for your app and tenant. // var credential = new InteractiveBrowserCredential( // new InteractiveBrowserCredentialBrokerOptions(windowHandle) // { From 5c3f295f6a197c385244159dd6c727bd83dab414 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Thu, 22 Aug 2024 16:30:27 -0400 Subject: [PATCH 14/22] fix comment --- docs/azure/sdk/authentication/additional-methods.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 564eabe00a717..f625a2338d080 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -111,12 +111,12 @@ private void button1_Click(object sender, EventArgs e) new InteractiveBrowserCredentialBrokerOptions(windowHandle)); // To authenticate and authorize with an app, substitute - // your-tenant-id and your-client-id with the values for your app and tenant. + // and with the values for your app and tenant. // var credential = new InteractiveBrowserCredential( // new InteractiveBrowserCredentialBrokerOptions(windowHandle) // { - // TenantId = "your-tenant-id", - // ClientId = "your-client-id" + // TenantId = "", + // ClientId = "" // } // ); From 42ac93aeb6a53ab03dfe967e99445848b3f4389a Mon Sep 17 00:00:00 2001 From: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:40:11 -0400 Subject: [PATCH 15/22] Apply suggestions from code review Co-authored-by: Christopher Scott --- docs/azure/sdk/authentication/additional-methods.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index f625a2338d080..aa0f24df22fb0 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -53,9 +53,9 @@ For more exact control, such as setting redirect URIs, you can supply specific a ## Interactive brokered authentication -This method interactively authenticates an application through [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) by collecting user credentials using the system authentication broker. A system authentication broker is an app running on a user's machine that manages the authentication handshakes and token maintenance for all connected accounts. Currently, only the Windows authentication broker, Web Account Manager (WAM), is supported. Users on macOS and Linux will be authenticated through a browser. +This method interactively authenticates an application through [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) by collecting user credentials using the system authentication broker. A system authentication broker is an app running on a user's machine that manages the authentication handshakes and token maintenance for all connected accounts. Currently, only the Windows authentication broker, Web Account Manager (WAM), is supported. Users on macOS and Linux will be authenticated through the non-brokered interactive browser flow. -WAM enables identity providers such as Microsoft Entra ID to natively plug into the OS and provide the service to other apps to streamline the login process. WAM offers the following benefits: +WAM enables identity providers such as Microsoft Entra ID to natively plug into the OS and provide the service to other apps to provide a more secure login process. WAM offers the following benefits: - **Feature support**: Apps can access OS-level and service-level capabilities, including Windows Hello, conditional access policies, and FIDO keys. - **Streamlined single sign-on**: Apps can use the built-in account picker, allowing the user to select an existing account instead of repeatedly entering the same credentials. From 3e20aa99f021ee410c679da697a751efffb7ac17 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Fri, 23 Aug 2024 14:08:52 -0400 Subject: [PATCH 16/22] added code snippets --- .../sdk/authentication/additional-methods.md | 70 +--------- .../InteractiveBrokeredAuth.Designer.cs | 59 +++++++++ .../InteractiveBrokeredAuth.cs | 44 +++++++ .../InteractiveBrokeredAuth.resx | 120 ++++++++++++++++++ .../InteractiveBrokeredAuthSample.csproj | 17 +++ .../InteractiveBrowserAuth.Designer.cs | 59 +++++++++ .../additional-auth/InteractiveBrowserAuth.cs | 25 ++++ .../InteractiveBrowserAuth.resx | 120 ++++++++++++++++++ .../sdk/snippets/additional-auth/Program.cs | 22 ++++ .../SilentBrokeredAuth.Designer.cs | 59 +++++++++ .../additional-auth/SilentBrokeredAuth.cs | 48 +++++++ .../additional-auth/SilentBrokeredAuth.resx | 120 ++++++++++++++++++ 12 files changed, 697 insertions(+), 66 deletions(-) create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx create mode 100644 docs/azure/sdk/snippets/additional-auth/Program.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index aa0f24df22fb0..d698605e61365 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -29,25 +29,11 @@ Perform the following steps to enable the application to authenticate through th > [!IMPORTANT] > You must also be the admin of your tenant to grant consent to your application when you sign in for the first time. -If you can't configure the device code flow option, your application might need to be multitenant. To make this change, navigate to the **Authentication** panel, select **Accounts in any organizational directory** (under **Supported account types**), and then select **Yes** for **Allow public client flows**. - ### Example using InteractiveBrowserCredential The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -```csharp -using Azure.Identity; -using Azure.Storage.Blobs; - -var client = new BlobServiceClient( - new Uri("https://.blob.core.windows.net"), - new InteractiveBrowserCredential()); - -foreach (var blobItem in client.GetBlobContainers()) -{ - Console.WriteLine(blobItem.Name); -} -``` +:::code language="csharp" source="snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="15-17"::: For more exact control, such as setting redirect URIs, you can supply specific arguments to `InteractiveBrowserCredential` such as `redirect_uri`. @@ -64,7 +50,7 @@ WAM enables identity providers such as Microsoft Entra ID to natively plug into Personal Microsoft accounts and work or school accounts are supported. If a supported version of Windows is used, the default browser-based UI is replaced with a smoother authentication experience, similar to Windows built-in apps. -Interactive brokered authentication enables the application for all operations allowed by the interactive login credentials. As a result, if you're the owner or administrator of your subscription, your code has inherent access to most resources in that subscription without having to assign any specific permissions. +Interactive brokered authentication enables the application for all operations allowed by the interactive login credentials. ### Enable applications for interactive brokered authentication @@ -98,40 +84,7 @@ Perform the following steps to enable the application to authenticate through th The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) in a Windows Forms app to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -```csharp -using Azure.Identity; -using Azure.Identity.Broker; - -private void button1_Click(object sender, EventArgs e) -{ - // Get the handle of the current window - IntPtr windowHandle = this.Handle; - - var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle)); - - // To authenticate and authorize with an app, substitute - // and with the values for your app and tenant. - // var credential = new InteractiveBrowserCredential( - // new InteractiveBrowserCredentialBrokerOptions(windowHandle) - // { - // TenantId = "", - // ClientId = "" - // } - // ); - - var client = new BlobServiceClient( - new Uri("https://.blob.core.windows.net/"), - credential - ); - - // Prompt for credentials appears on first use of the client - foreach (var container in client.GetBlobContainers()) - { - Console.WriteLine(container.Name); - } -} -``` +:::code language="csharp" source="snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="16-20"::: > [!NOTE] > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window handles. @@ -148,22 +101,7 @@ Many people always sign in to Windows with the same user account and, therefore, The following example shows how to enable sign-in with the default system account: -```csharp -using Azure.Identity; -using Azure.Identity.Broker; - -// App code omitted for brevity - -IntPtr windowHandle = this.Handle; - -var credential = new InteractiveBrowserCredential( - new InteractiveBrowserCredentialBrokerOptions(windowHandle) - { - // Enable silent brokered authentication using the default account - UseDefaultBrokerAccount = true, - } -); -``` +:::code language="csharp" source="snippets/additional-auth/SilentBrokeredAuth.cs" highlight="16-24"::: Once you opt into this behavior, the credential attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential falls back to displaying the account picker dialog, from which the user can select the appropriate account. diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs new file mode 100644 index 0000000000000..5080b5712c60e --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs @@ -0,0 +1,59 @@ +namespace InteractiveBrokeredAuthSample +{ + partial class InteractiveBrokeredAuth + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + button1 = new Button(); + SuspendLayout(); + // + // button1 + // + button1.Location = new Point(25, 12); + button1.Name = "button1"; + button1.Size = new Size(200, 44); + button1.TabIndex = 0; + button1.Text = "TestInteractiveBrokeredAuth"; + button1.UseVisualStyleBackColor = true; + button1.Click += testInteractiveBrokeredAuth_Click; + // + // InteractiveBrokeredAuth + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(button1); + Name = "InteractiveBrokeredAuth"; + Text = "InteractiveBrokeredAuth"; + ResumeLayout(false); + } + + #endregion + + private Button button1; + } +} \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs new file mode 100644 index 0000000000000..457125bb35bf3 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs @@ -0,0 +1,44 @@ +using Azure.Identity; +using Azure.Identity.Broker; +using Azure.Storage.Blobs; + +namespace InteractiveBrokeredAuthSample +{ + public partial class InteractiveBrokeredAuth : Form + { + public InteractiveBrokeredAuth() + { + InitializeComponent(); + } + + private void testInteractiveBrokeredAuth_Click(object sender, EventArgs e) + { + // Get the handle of the current window + IntPtr windowHandle = this.Handle; + + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle)); + + // To authenticate and authorize with an app, substitute the + // and placeholders with the values for your app and tenant. + // var credential = new InteractiveBrowserCredential( + // new InteractiveBrowserCredentialBrokerOptions(windowHandle) + // { + // TenantId = "your-tenant-id", + // ClientId = "your-client-id" + // } + // ); + + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net/"), + credential + ); + + // Prompt for credentials appears on first use of the client + foreach (var container in client.GetBlobContainers()) + { + Console.WriteLine(container.Name); + } + } + } +} diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx new file mode 100644 index 0000000000000..af32865ec12ff --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj new file mode 100644 index 0000000000000..125a0db706c2a --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj @@ -0,0 +1,17 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + + + + + + + \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs new file mode 100644 index 0000000000000..a9e6f078a2fa7 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs @@ -0,0 +1,59 @@ +namespace InteractiveBrokeredAuthSample +{ + partial class InteractiveBrowserAuth + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + button1 = new Button(); + SuspendLayout(); + // + // button1 + // + button1.Location = new Point(34, 39); + button1.Name = "button1"; + button1.Size = new Size(207, 43); + button1.TabIndex = 0; + button1.Text = "TestInteractiveBrowserAuth"; + button1.UseVisualStyleBackColor = true; + button1.Click += testInteractiveBrowserAuth_Click; + // + // InteractiveBrowserAuth + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(button1); + Name = "InteractiveBrowserAuth"; + Text = "InteractiveBrowserAuth"; + ResumeLayout(false); + } + + #endregion + + private Button button1; + } +} \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs new file mode 100644 index 0000000000000..e370b50fde56d --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs @@ -0,0 +1,25 @@ +using Azure.Identity; +using Azure.Storage.Blobs; + +namespace InteractiveBrokeredAuthSample +{ + public partial class InteractiveBrowserAuth : Form + { + public InteractiveBrowserAuth() + { + InitializeComponent(); + } + + private void testInteractiveBrowserAuth_Click(object sender, EventArgs e) + { + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net"), + new InteractiveBrowserCredential()); + + foreach (var blobItem in client.GetBlobContainers()) + { + Console.WriteLine(blobItem.Name); + } + } + } +} diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx new file mode 100644 index 0000000000000..af32865ec12ff --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/Program.cs b/docs/azure/sdk/snippets/additional-auth/Program.cs new file mode 100644 index 0000000000000..0043a0a56b686 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/Program.cs @@ -0,0 +1,22 @@ +using Azure.Identity; +using Azure.Identity.Broker; + +namespace WinFormsApp1 +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new Form1()); + + + } + } +} \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs new file mode 100644 index 0000000000000..078edbd759e50 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs @@ -0,0 +1,59 @@ +namespace InteractiveBrokeredAuthSample +{ + partial class SilentBrokeredAuth + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + button1 = new Button(); + SuspendLayout(); + // + // button1 + // + button1.Location = new Point(35, 36); + button1.Name = "button1"; + button1.Size = new Size(165, 39); + button1.TabIndex = 0; + button1.Text = "TestSilentBrokeredAuth"; + button1.UseVisualStyleBackColor = true; + button1.Click += testSilentBrokeredAuth_Click; + // + // SilentBrokeredAuth + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(button1); + Name = "SilentBrokeredAuth"; + Text = "SilentBrokeredAuth"; + ResumeLayout(false); + } + + #endregion + + private Button button1; + } +} \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs new file mode 100644 index 0000000000000..20f6ccf87f6f7 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs @@ -0,0 +1,48 @@ +using Azure.Identity; +using Azure.Identity.Broker; +using Azure.Storage.Blobs; + +namespace InteractiveBrokeredAuthSample +{ + public partial class SilentBrokeredAuth : Form + { + public SilentBrokeredAuth() + { + InitializeComponent(); + } + + private void testSilentBrokeredAuth_Click(object sender, EventArgs e) + { + // Get the handle of the current window + IntPtr windowHandle = this.Handle; + + var credential = new InteractiveBrowserCredential( + new InteractiveBrowserCredentialBrokerOptions(windowHandle) + { + // Enable silent brokered authentication using the default account + UseDefaultBrokerAccount = true, + }); + + // To authenticate and authorize with an app, substitute the + // and placeholders with the values for your app and tenant. + // var credential = new InteractiveBrowserCredential( + // new InteractiveBrowserCredentialBrokerOptions(windowHandle) + // { + // TenantId = "your-tenant-id", + // ClientId = "your-client-id" + // } + // ); + + var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net/"), + credential + ); + + // Prompt for credentials appears on first use of the client + foreach (var container in client.GetBlobContainers()) + { + Console.WriteLine(container.Name); + } + } + } +} diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx new file mode 100644 index 0000000000000..af32865ec12ff --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file From ae7d83955f744011df410c90adf7e46a35e746a3 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Fri, 23 Aug 2024 14:25:35 -0400 Subject: [PATCH 17/22] fix build --- docs/azure/sdk/snippets/additional-auth/Program.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/azure/sdk/snippets/additional-auth/Program.cs b/docs/azure/sdk/snippets/additional-auth/Program.cs index 0043a0a56b686..262fffa6a0e23 100644 --- a/docs/azure/sdk/snippets/additional-auth/Program.cs +++ b/docs/azure/sdk/snippets/additional-auth/Program.cs @@ -1,5 +1,4 @@ -using Azure.Identity; -using Azure.Identity.Broker; +using InteractiveBrokeredAuthSample; namespace WinFormsApp1 { @@ -14,7 +13,7 @@ static void Main() // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new InteractiveBrowserAuth()); } From 03e9a534bdb3a39c110291367f869f93c919b0c1 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Fri, 23 Aug 2024 14:33:30 -0400 Subject: [PATCH 18/22] fix snippets --- docs/azure/sdk/authentication/additional-methods.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index d698605e61365..ed3c6cd08b1bd 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -33,7 +33,7 @@ Perform the following steps to enable the application to authenticate through th The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -:::code language="csharp" source="snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="15-17"::: +:::code language="csharp" source="../snippets/additional-auth/InteractiveBrowserAuth.cs" highlight="15-17"::: For more exact control, such as setting redirect URIs, you can supply specific arguments to `InteractiveBrowserCredential` such as `redirect_uri`. @@ -84,7 +84,7 @@ Perform the following steps to enable the application to authenticate through th The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) in a Windows Forms app to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -:::code language="csharp" source="snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="16-20"::: +:::code language="csharp" source="../snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="16-20"::: > [!NOTE] > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window handles. @@ -101,7 +101,7 @@ Many people always sign in to Windows with the same user account and, therefore, The following example shows how to enable sign-in with the default system account: -:::code language="csharp" source="snippets/additional-auth/SilentBrokeredAuth.cs" highlight="16-24"::: +:::code language="csharp" source="../snippets/additional-auth/SilentBrokeredAuth.cs" highlight="16-24"::: Once you opt into this behavior, the credential attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential falls back to displaying the account picker dialog, from which the user can select the appropriate account. From cf95895abe00831f5b93215a4cc4a248633252c8 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Fri, 23 Aug 2024 15:01:57 -0400 Subject: [PATCH 19/22] snippets --- .../sdk/authentication/additional-methods.md | 25 +++---------------- .../InteractiveBrokeredAuth.Designer.cs | 0 .../InteractiveBrokeredAuth.cs | 0 .../InteractiveBrokeredAuth.resx | 0 .../InteractiveBrokeredAuthSample.csproj | 0 .../InteractiveBrowserAuth.Designer.cs | 0 .../InteractiveBrowserAuth.cs | 0 .../InteractiveBrowserAuth.resx | 0 .../{ => interactive}/Program.cs | 0 .../SilentBrokeredAuth.Designer.cs | 0 .../{ => interactive}/SilentBrokeredAuth.cs | 0 .../{ => interactive}/SilentBrokeredAuth.resx | 0 .../username-password/Program.cs | 16 ++++++++++++ .../username-password/UsernamePassword.csproj | 16 ++++++++++++ 14 files changed, 36 insertions(+), 21 deletions(-) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrokeredAuth.Designer.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrokeredAuth.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrokeredAuth.resx (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrokeredAuthSample.csproj (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrowserAuth.Designer.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrowserAuth.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/InteractiveBrowserAuth.resx (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/Program.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/SilentBrokeredAuth.Designer.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/SilentBrokeredAuth.cs (100%) rename docs/azure/sdk/snippets/additional-auth/{ => interactive}/SilentBrokeredAuth.resx (100%) create mode 100644 docs/azure/sdk/snippets/additional-auth/username-password/Program.cs create mode 100644 docs/azure/sdk/snippets/additional-auth/username-password/UsernamePassword.csproj diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index ed3c6cd08b1bd..97464ee2fee35 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -33,7 +33,7 @@ Perform the following steps to enable the application to authenticate through th The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential) to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -:::code language="csharp" source="../snippets/additional-auth/InteractiveBrowserAuth.cs" highlight="15-17"::: +:::code language="csharp" source="../snippets/additional-auth/interactive/InteractiveBrowserAuth.cs" highlight="15-17"::: For more exact control, such as setting redirect URIs, you can supply specific arguments to `InteractiveBrowserCredential` such as `redirect_uri`. @@ -84,7 +84,7 @@ Perform the following steps to enable the application to authenticate through th The following example demonstrates using an [`InteractiveBrowserCredential`](/dotnet/api/azure.identity.interactivebrowsercredential?view=azure-dotnet) in a Windows Forms app to authenticate with the [`BlobServiceClient`](/dotnet/api/azure.storage.blobs.blobserviceclient): -:::code language="csharp" source="../snippets/additional-auth/InteractiveBrokeredAuth.cs" highlight="16-20"::: +:::code language="csharp" source="../snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs" highlight="16-20"::: > [!NOTE] > Visit the [Parent window handles](/entra/msal/dotnet/acquiring-tokens/desktop-mobile/wam#parent-window-handles) and [Retrieve a window handle](/windows/apps/develop/ui-input/retrieve-hwnd) articles for more information about retrieving window handles. @@ -101,7 +101,7 @@ Many people always sign in to Windows with the same user account and, therefore, The following example shows how to enable sign-in with the default system account: -:::code language="csharp" source="../snippets/additional-auth/SilentBrokeredAuth.cs" highlight="16-24"::: +:::code language="csharp" source="../snippets/additional-auth/interactive/SilentBrokeredAuth.cs" highlight="16-24"::: Once you opt into this behavior, the credential attempts to sign in by asking the underlying Microsoft Authentication Library (MSAL) to perform the sign-in for the default system account. If the sign-in fails, the credential falls back to displaying the account picker dialog, from which the user can select the appropriate account. @@ -127,21 +127,4 @@ This method authenticates an application using previously collected credentials > > Furthermore, this method authenticates only work and school accounts; Microsoft accounts aren't supported. For more information, see [Sign up your organization to use Microsoft Entra ID](/entra/fundamentals/sign-up-organization). -```csharp -using Azure.Identity; -using Azure.Storage.Blobs; - -var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"); -var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID"); -var username = Environment.GetEnvironmentVariable("AZURE_USERNAME"); -var password = Environment.GetEnvironmentVariable("AZURE_PASSWORD"); - -var client = new BlobServiceClient( - new Uri("https://.blob.core.windows.net"), - new UsernamePasswordCredential(username, password, tenantId, clientId)); - -foreach (var blobItem in client.GetBlobContainers()) -{ - Console.WriteLine(blobItem.Name); -} -``` +:::code language="csharp" source="../snippets/additional-auth/username-password/Program.cs" highlight="9-11"::: diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.Designer.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.Designer.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.Designer.cs diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.resx similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuth.resx rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.resx diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuthSample.csproj similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrokeredAuthSample.csproj rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuthSample.csproj diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.Designer.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.Designer.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.Designer.cs diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.cs diff --git a/docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.resx similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/InteractiveBrowserAuth.resx rename to docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrowserAuth.resx diff --git a/docs/azure/sdk/snippets/additional-auth/Program.cs b/docs/azure/sdk/snippets/additional-auth/interactive/Program.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/Program.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/Program.cs diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs b/docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.Designer.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.Designer.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.Designer.cs diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs b/docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.cs similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.cs rename to docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.cs diff --git a/docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx b/docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.resx similarity index 100% rename from docs/azure/sdk/snippets/additional-auth/SilentBrokeredAuth.resx rename to docs/azure/sdk/snippets/additional-auth/interactive/SilentBrokeredAuth.resx diff --git a/docs/azure/sdk/snippets/additional-auth/username-password/Program.cs b/docs/azure/sdk/snippets/additional-auth/username-password/Program.cs new file mode 100644 index 0000000000000..3dbf88e473626 --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/username-password/Program.cs @@ -0,0 +1,16 @@ +using Azure.Identity; +using Azure.Storage.Blobs; + +var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"); +var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID"); +var username = Environment.GetEnvironmentVariable("AZURE_USERNAME"); +var password = Environment.GetEnvironmentVariable("AZURE_PASSWORD"); + +var client = new BlobServiceClient( + new Uri("https://.blob.core.windows.net"), + new UsernamePasswordCredential(username, password, tenantId, clientId)); + +foreach (var blobItem in client.GetBlobContainers()) +{ + Console.WriteLine(blobItem.Name); +} \ No newline at end of file diff --git a/docs/azure/sdk/snippets/additional-auth/username-password/UsernamePassword.csproj b/docs/azure/sdk/snippets/additional-auth/username-password/UsernamePassword.csproj new file mode 100644 index 0000000000000..35120169687dd --- /dev/null +++ b/docs/azure/sdk/snippets/additional-auth/username-password/UsernamePassword.csproj @@ -0,0 +1,16 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + + + From 5ddb1a7442f15ef12fb421cb735ba150452be29e Mon Sep 17 00:00:00 2001 From: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:07:36 -0400 Subject: [PATCH 20/22] Apply suggestions from code review Co-authored-by: Scott Addie <10702007+scottaddie@users.noreply.github.com> --- docs/azure/sdk/authentication/additional-methods.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 97464ee2fee35..4a6af5689b34b 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -20,7 +20,7 @@ Interactive browser authentication enables the application for all operations al Perform the following steps to enable the application to authenticate through the interactive browser flow. These steps also work for the [device code authentication](#device-code-authentication) flow described later. This process is only necessary if you are using `InteractiveBrowserCredential` in your code. -1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left navigation. +1. In the [Azure portal](https://portal.azure.com), navigate to **Microsoft Entra ID** and select **App registrations** on the left navigation. 1. Select the registration for your app, then select **Authentication**. 1. Under **Advanced settings**, select **Yes** for **Allow public client flows**. 1. Select **Save** to apply the changes. @@ -56,18 +56,18 @@ Interactive brokered authentication enables the application for all operations a Perform the following steps to enable the application to authenticate through the interactive broker flow. -1. On the [Azure portal](https://portal.azure.com), navigate to Microsoft Entra ID and select **App registrations** on the left-hand menu. +1. On the [Azure portal](https://portal.azure.com), navigate to **Microsoft Entra ID** and select **App registrations** on the left-hand menu. 1. Select the registration for your app, then select **Authentication**. 1. Add the WAM redirect URI to your app registration via a platform configuration: 1. Under **Platform configurations**, select **+ Add a platform**. 1. Under **Configure platforms**, select the tile for your application type (platform) to configure its settings, such as **mobile and desktop applications**. - 1. In **Custom redirect URIs**, enter the WAM redirect URI: + 1. In **Custom redirect URIs**, enter the following WAM redirect URI: ```text ms-appx-web://microsoft.aad.brokerplugin/{client_id} ``` - The `{client_id}` placeholder must be replaced with the Application (client) ID listed on the Overview pane of the app registration. + The `{client_id}` placeholder must be replaced with the **Application (client) ID** listed on the **Overview** pane of the app registration. 1. Select **Configure**. @@ -97,7 +97,7 @@ The following screenshot shows the user sign-in experience: ### Authenticate the default system account via WAM -Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM and `InteractiveBrowserCredential` also support a silent login process that automatically uses a default account so the user does not have to repeatedly select it. +Many people always sign in to Windows with the same user account and, therefore, only ever want to authenticate using that account. WAM and `InteractiveBrowserCredential` also support a silent login process that automatically uses a default account so the user doesn't have to repeatedly select it. The following example shows how to enable sign-in with the default system account: From bc5aabb8b6930f3d0ce96cfce014ec4d6aba56c3 Mon Sep 17 00:00:00 2001 From: Alex Wolf Date: Fri, 23 Aug 2024 16:21:29 -0400 Subject: [PATCH 21/22] fix header --- docs/azure/sdk/authentication/additional-methods.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/azure/sdk/authentication/additional-methods.md b/docs/azure/sdk/authentication/additional-methods.md index 97464ee2fee35..a68d8191d3088 100644 --- a/docs/azure/sdk/authentication/additional-methods.md +++ b/docs/azure/sdk/authentication/additional-methods.md @@ -48,9 +48,7 @@ WAM enables identity providers such as Microsoft Entra ID to natively plug into - **Enhanced security**: Bug fixes and enhancements ship with Windows. - **Token protection**: Refresh tokens are device-bound, and apps can acquire device-bound access tokens. -Personal Microsoft accounts and work or school accounts are supported. If a supported version of Windows is used, the default browser-based UI is replaced with a smoother authentication experience, similar to Windows built-in apps. - -Interactive brokered authentication enables the application for all operations allowed by the interactive login credentials. +Interactive brokered authentication enables the application for all operations allowed by the interactive login credentials. Personal Microsoft accounts and work or school accounts are supported. If a supported version of Windows is used, the default browser-based UI is replaced with a smoother authentication experience, similar to Windows built-in apps. ### Enable applications for interactive brokered authentication @@ -118,7 +116,7 @@ For more information, see [Microsoft identity platform and the OAuth 2.0 device Device code authentication in a development environment enables the application for all operations allowed by the interactive login credentials. As a result, if you're the owner or administrator of your subscription, your code has inherent access to most resources in that subscription without having to assign any specific permissions. However, you can use this method with a specific client ID, rather than the default, for which you can assign specific permissions. -## Authentication with a username and password +## Username and password authentication This method authenticates an application using previously collected credentials and the [UsernamePasswordCredential](/dotnet/api/azure.identity.usernamepasswordcredential) object. From 50125118a866d31f50e93d488d1db6a143273815 Mon Sep 17 00:00:00 2001 From: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:48:29 -0400 Subject: [PATCH 22/22] Apply suggestions from code review Co-authored-by: Christopher Scott --- .../additional-auth/interactive/InteractiveBrokeredAuth.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs index 457125bb35bf3..911232d71c356 100644 --- a/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs +++ b/docs/azure/sdk/snippets/additional-auth/interactive/InteractiveBrokeredAuth.cs @@ -19,7 +19,7 @@ private void testInteractiveBrokeredAuth_Click(object sender, EventArgs e) var credential = new InteractiveBrowserCredential( new InteractiveBrowserCredentialBrokerOptions(windowHandle)); - // To authenticate and authorize with an app, substitute the + // To authenticate and authorize with an Entra ID app registration, substitute the // and placeholders with the values for your app and tenant. // var credential = new InteractiveBrowserCredential( // new InteractiveBrowserCredentialBrokerOptions(windowHandle)