From e8bfc576f8261d983ee64b24b3794314e95ae8a5 Mon Sep 17 00:00:00 2001 From: KoenZomers Date: Fri, 31 Mar 2023 13:05:34 +0200 Subject: [PATCH 1/2] Making URL optional when using a managed identity --- documentation/Connect-PnPOnline.md | 10 +++++----- src/Commands/Base/ConnectOnline.cs | 8 ++++---- src/Commands/Base/PnPConnection.cs | 9 +++++++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/documentation/Connect-PnPOnline.md b/documentation/Connect-PnPOnline.md index 6634d67e5..c4a92e7f9 100644 --- a/documentation/Connect-PnPOnline.md +++ b/documentation/Connect-PnPOnline.md @@ -76,22 +76,22 @@ Connect-PnPOnline -Url -AccessToken [-AzureEnvironment -ManagedIdentity [-ReturnConnection] +Connect-PnPOnline [-Url ] -ManagedIdentity [-ReturnConnection] ``` ### User Assigned Managed Identity by Client Id ``` -Connect-PnPOnline -Url -ManagedIdentity -UserAssignedManagedIdentityClientId [-ReturnConnection] +Connect-PnPOnline [-Url ] -ManagedIdentity -UserAssignedManagedIdentityClientId [-ReturnConnection] ``` ### User Assigned Managed Identity by Principal Id ``` -Connect-PnPOnline -Url -ManagedIdentity -UserAssignedManagedIdentityObjectId [-ReturnConnection] +Connect-PnPOnline [-Url ] -ManagedIdentity -UserAssignedManagedIdentityObjectId [-ReturnConnection] ``` ### User Assigned Managed Identity by Azure Resource Id ``` -Connect-PnPOnline -Url -ManagedIdentity -UserAssignedManagedIdentityAzureResourceId [-ReturnConnection] +Connect-PnPOnline [-Url ] -ManagedIdentity -UserAssignedManagedIdentityAzureResourceId [-ReturnConnection] ``` ### Environment Variable @@ -576,7 +576,7 @@ Type: String Parameter Sets: Credentials, SharePoint ACS (Legacy) App Only, App-Only with Azure Active Directory, App-Only with Azure Active Directory using a certificate from the Windows Certificate Management Store by thumbprint, SPO Management Shell Credentials, PnP Management Shell / DeviceLogin, Web Login for Multi Factor Authentication, Interactive for Multi Factor Authentication, Access Token, Environment Variable Aliases: -Required: True +Required: True (Except when using -ManagedIdentity) Position: 0 Default value: None Accept pipeline input: True (ByValue) diff --git a/src/Commands/Base/ConnectOnline.cs b/src/Commands/Base/ConnectOnline.cs index 492d45e4e..85ea83ca3 100644 --- a/src/Commands/Base/ConnectOnline.cs +++ b/src/Commands/Base/ConnectOnline.cs @@ -78,10 +78,10 @@ public class ConnectOnline : BasePSCmdlet [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_DEVICELOGIN, ValueFromPipeline = true)] [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_WEBLOGIN, ValueFromPipeline = true)] [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_INTERACTIVE, ValueFromPipeline = true)] - [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_SYSTEMASSIGNEDMANAGEDIDENTITY, ValueFromPipeline = true)] - [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYCLIENTID, ValueFromPipeline = true)] - [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYPRINCIPALID, ValueFromPipeline = true)] - [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYAZURERESOURCEID, ValueFromPipeline = true)] + [Parameter(Mandatory = false, Position = 0, ParameterSetName = ParameterSet_SYSTEMASSIGNEDMANAGEDIDENTITY, ValueFromPipeline = true)] + [Parameter(Mandatory = false, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYCLIENTID, ValueFromPipeline = true)] + [Parameter(Mandatory = false, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYPRINCIPALID, ValueFromPipeline = true)] + [Parameter(Mandatory = false, Position = 0, ParameterSetName = ParameterSet_USERASSIGNEDMANAGEDIDENTITYBYAZURERESOURCEID, ValueFromPipeline = true)] [Parameter(Mandatory = true, Position = 0, ParameterSetName = ParameterSet_ENVIRONMENTVARIABLE, ValueFromPipeline = true)] public string Url; diff --git a/src/Commands/Base/PnPConnection.cs b/src/Commands/Base/PnPConnection.cs index 196fc9618..e11cf8051 100644 --- a/src/Commands/Base/PnPConnection.cs +++ b/src/Commands/Base/PnPConnection.cs @@ -371,8 +371,13 @@ internal static PnPConnection CreateWithCert(Uri url, string clientId, string te internal static PnPConnection CreateWithManagedIdentity(Cmdlet cmdlet, string url, string tenantAdminUrl, string userAssignedManagedIdentityObjectId = null, string userAssignedManagedIdentityClientId = null, string userAssignedManagedIdentityAzureResourceId = null) { var httpClient = PnP.Framework.Http.PnPHttpClient.Instance.GetHttpClient(); - var resourceUri = new Uri(url); - var defaultResource = $"{resourceUri.Scheme}://{resourceUri.Authority}"; + string defaultResource = "https://graph.microsoft.com"; + if(url != null) + { + var resourceUri = new Uri(url); + defaultResource = $"{resourceUri.Scheme}://{resourceUri.Authority}"; + } + cmdlet.WriteVerbose("Acquiring token for resource " + defaultResource); var accessToken = TokenHandler.GetManagedIdentityTokenAsync(cmdlet, httpClient, defaultResource, userAssignedManagedIdentityObjectId, userAssignedManagedIdentityClientId, userAssignedManagedIdentityAzureResourceId).GetAwaiter().GetResult(); From cb96fa53c40af49472fb86f1e3dbc77339fad0a9 Mon Sep 17 00:00:00 2001 From: KoenZomers Date: Fri, 31 Mar 2023 13:07:52 +0200 Subject: [PATCH 2/2] Updating documentation to remove URL from managed identity samples --- pages/articles/azureautomationrunbook.md | 4 ++-- pages/articles/azurefunctions.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/articles/azureautomationrunbook.md b/pages/articles/azureautomationrunbook.md index a805704de..7f6d36567 100644 --- a/pages/articles/azureautomationrunbook.md +++ b/pages/articles/azureautomationrunbook.md @@ -152,9 +152,9 @@ We're now ready to create a Runbook in which your PnP PowerShell script will run 1. On the Edit PowerShell Runbook page, enter your PnP PowerShell code in the large white area, i.e.: ```powershell - Connect-PnPOnline tenant.sharepoint.com -ManagedIdentity + Connect-PnPOnline -ManagedIdentity - Get-PnPWeb + Get-PnPMicrosoft365Group ``` Once done, click on **Save** at the top of the screen and then on **Test pane** to test your Runbook. diff --git a/pages/articles/azurefunctions.md b/pages/articles/azurefunctions.md index 2c8ec525a..90466255e 100644 --- a/pages/articles/azurefunctions.md +++ b/pages/articles/azurefunctions.md @@ -151,7 +151,7 @@ using namespace System.Net param($Request, $TriggerMetadata) -Connect-PnPOnline tenant.sharepoint.com -ManagedIdentity +Connect-PnPOnline -ManagedIdentity Get-PnPMicrosoft365Group Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{