Skip to content

Commit 14aafb8

Browse files
authored
Merge pull request #310524 from aloverro/3rd-party-read-write-initial-documentation
Integrating Parnter Applications
2 parents 2d99a69 + bcf98f8 commit 14aafb8

9 files changed

Lines changed: 747 additions & 0 deletions

articles/planetary-computer/TOC.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@
8787
href: create-connection-arc-gis-pro.md
8888
- name: Connect to QGIS
8989
href: configure-qgis.md
90+
- name: Working with Partner Applications
91+
items:
92+
- name: Partner Application Overview
93+
href: working-with-partner-applications.md
94+
- name: Authorizing Partner Cross-Tenant Application Access
95+
href: authorize-cross-tenant-partner-applications.md
96+
- name: Authoring and Configuring a Partner Application
97+
href: configure-cross-tenant-application.md
9098
- name: Azure Batch and Microsoft Planetary Computer Pro
9199
href: azure-batch.md
92100
- name: API Reference
Lines changed: 366 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,366 @@
1+
---
2+
title: Authorize cross-tenant partner applications for Microsoft Planetary Computer Pro
3+
description: Learn how to authorize third-party geospatial data and service provider applications to access your Microsoft Planetary Computer Pro GeoCatalogs.
4+
author: aloverro
5+
ms.author: adamloverro
6+
ms.service: planetary-computer-pro
7+
ms.topic: how-to
8+
ms.date: 01/13/2026
9+
10+
#customer intent: As an administrator of my organizations geospatial enterprise and an operator of Microsoft Planetary Computer Pro, I need to authorize access to third party data or service provider applications my my Microsoft Planetary Computer Pro GeoCatalogs.
11+
---
12+
13+
# Authorize cross-tenant partner applications for Microsoft Planetary Computer Pro
14+
15+
This article guides IT and cloud administrators through the process of authorizing a third-party partner application to access GeoCatalog resources. By completing these steps, you enable partner organizations—such as geospatial data providers or analytics services—to read from and write data to your Microsoft Planetary Computer Pro GeoCatalogs.
16+
17+
## Prerequisites
18+
19+
- Azure account with an active subscription - [create an account for free](https://azure.microsoft.com/free/?ref=microsoft.com&utm_source=microsoft.com&utm_medium=docs&utm_campaign=visualstudio)
20+
- An existing [GeoCatalog resource](./deploy-geocatalog-resource.md)
21+
- One of the following Microsoft Entra ID roles:
22+
- Global Administrator
23+
- Application Administrator
24+
- Cloud Application Administrator
25+
- Owner or User Access Administrator role on the GeoCatalog resource
26+
- Azure CLI installed and configured - [install the Azure CLI](/cli/azure/install-azure-cli)
27+
- Information from your partner:
28+
- Partner's Application (client) ID
29+
- Redirect URI configured in the partner's application registration (Optional)
30+
31+
## Overview
32+
33+
Authorizing a partner application involves three main steps:
34+
35+
1. **Create a service principal** for the partner's application in your tenant
36+
1. **Grant admin consent** to the application's permission requests
37+
1. **Assign GeoCatalog roles** to the service principal
38+
39+
<!-- NOTE: For MS Learn publishing, replace the Mermaid diagram below with a PNG image -->
40+
41+
```mermaid
42+
flowchart LR
43+
A[Receive partner<br/>app details] --> B[Create service<br/>principal]
44+
B --> C[Grant admin<br/>consent]
45+
C --> D[Assign GeoCatalog<br/>Administrator role]
46+
D --> E[Partner can<br/>access GeoCatalog]
47+
```
48+
49+
## Create a service principal for the partner application
50+
51+
A service principal is the representation of an application in your Microsoft Entra tenant. Creating a service principal for the partner's application ID establishes the identity that you can then grant permissions to.
52+
53+
1. Sign in to Azure CLI with an account that has Application Administrator permissions:
54+
55+
```azurecli
56+
az login --tenant <your-tenant-id>
57+
```
58+
59+
1. Verify you're signed into the correct tenant:
60+
61+
```azurecli
62+
az account show --query "{TenantId:tenantId, User:user.name}" -o table
63+
```
64+
65+
1. Check if a service principal already exists for the partner application:
66+
67+
```azurecli
68+
az ad sp list --filter "appId eq '<partner-application-id>'" --query "[0].id" -o tsv
69+
```
70+
71+
If this command returns an object ID, the service principal already exists. Skip to the next section.
72+
73+
1. Create the service principal:
74+
75+
```azurecli
76+
az ad sp create --id <partner-application-id>
77+
```
78+
79+
Example output:
80+
81+
```json
82+
{
83+
"accountEnabled": true,
84+
"appId": "f914857f-af79-4a22-8a37-85e772c01b7f",
85+
"displayName": "Partner Geospatial App",
86+
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
87+
...
88+
}
89+
```
90+
91+
1. Save the service principal's `id` value (object ID) for use in subsequent steps:
92+
93+
```azurecli
94+
# Store the service principal object ID
95+
SP_ID=$(az ad sp list --filter "appId eq '<partner-application-id>'" --query "[0].id" -o tsv)
96+
echo "Service Principal ID: $SP_ID"
97+
```
98+
99+
## Grant admin consent to the partner application
100+
101+
Admin consent authorizes the partner application to use the requested permissions. This step is required before the application can authenticate against your tenant. Your partner should provide a link to perform this action as part of the application onboarding process.
102+
103+
> [!NOTE]
104+
> You can optionally contruct this URL yourself:
105+
>
106+
> Construct the admin consent URL using your tenant ID and the partner's application ID:
107+
>
108+
> ```text
109+
> https://login.microsoftonline.com/<your-tenant-id>/adminconsent?client_id=<partner-application-id>&redirect_uri=https://localhost:8080/callback
110+
> ```
111+
> The redirect URI must match one of the URIs configured in the partner's application registration. Confirm the correct URI with your partner.
112+
113+
1. Open the URL in a web browser and sign in with a Global Administrator or Application Administrator account.
114+
115+
1. Review the requested permissions and select **Accept** to grant consent.
116+
117+
After consent is granted, you're redirected to the specified redirect URI. You can close this browser window.
118+
119+
1. Verify that admin consent was granted by checking the service principal's permissions:
120+
121+
```azurecli
122+
az rest --method GET --url "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/oauth2PermissionGrants"
123+
```
124+
125+
Example output when consent has been granted:
126+
127+
```json
128+
{
129+
"value": [
130+
{
131+
"clientId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
132+
"consentType": "AllPrincipals",
133+
"id": "abc123def456",
134+
"principalId": null,
135+
"resourceId": "98765432-abcd-ef12-3456-7890abcdef12",
136+
"scope": "User.Read"
137+
}
138+
]
139+
}
140+
```
141+
142+
If the `value` array is empty, admin consent hasn't been granted yet.
143+
144+
### Alternative: Grant consent via Azure portal
145+
146+
You can also grant admin consent through the Microsoft Entra admin center:
147+
148+
1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/)
149+
1. Navigate to **Identity** > **Applications** > **Enterprise applications**
150+
1. Select the **Application Type** filter and set to value "All Applications"
151+
1. Find the partner application by using the search bar to enter the application name or ID. Select the partner application from the filtered list.
152+
1. Select **Security** > **Permissions** in the left sidebar
153+
1. Select **Grant admin consent for [your tenant]**
154+
1. Review and accept the permissions
155+
156+
## Assign the appropriate GeoCatalog role
157+
158+
The service principal for your data or service provider needs the appropriate role in order to interact with your GeoCatalog resources. Assign the **GeoCatalog Reader** role to applications that only need read access to your GeoCatalog. Assign the **GeoCatalog Administrator** role to applications that need to create collections, ingest data, and manage items in your GeoCatalog.
159+
160+
> [!NOTE]
161+
> The partner application integration feature is currently in preview and doesn't support a specific, limited access role for data or service provider partners. For this reason, it's recommended during the preview period that customers create a GeoCatalog resource dedicated to a specific partner to prevent access to other, organizational private, data.
162+
163+
### [GeoCatalog Administrator](#tab/geocatalog-administrator)
164+
1. Get your GeoCatalog resource ID:
165+
166+
```azurecli
167+
# Set your resource details
168+
SUBSCRIPTION_ID="<your-subscription-id>"
169+
RESOURCE_GROUP="<your-resource-group>"
170+
GEOCATALOG_NAME="<your-geocatalog-name>"
171+
172+
# Construct the resource ID
173+
GEOCATALOG_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Orbital/geoCatalogs/$GEOCATALOG_NAME"
174+
```
175+
176+
1. Verify the GeoCatalog resource exists and you have access:
177+
178+
```azurecli
179+
az resource show --ids $GEOCATALOG_RESOURCE_ID --query "{Name:name, Location:location, Type:type}" -o table
180+
```
181+
182+
1. Find the desired role definition:
183+
184+
185+
```azurecli
186+
az role definition list --name "GeoCatalog Administrator" --query "[0].id" -o tsv
187+
```
188+
189+
1. Check if the role assignment already exists:
190+
191+
```azurecli
192+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --query "[?roleDefinitionName=='GeoCatalog Administrator']" -o table
193+
```
194+
195+
1. Create the role assignment:
196+
197+
```azurecli
198+
az role assignment create \
199+
--assignee $SP_ID \
200+
--role "GeoCatalog Administrator" \
201+
--scope $GEOCATALOG_RESOURCE_ID
202+
```
203+
204+
Example output:
205+
206+
```json
207+
{
208+
"id": "/subscriptions/.../providers/Microsoft.Authorization/roleAssignments/...",
209+
"principalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
210+
"roleDefinitionName": "GeoCatalog Administrator",
211+
"scope": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Orbital/geoCatalogs/...",
212+
...
213+
}
214+
```
215+
### [GeoCatalog Reader](#tab/geocatalog-reader)
216+
1. Get your GeoCatalog resource ID:
217+
218+
```azurecli
219+
# Set your resource details
220+
SUBSCRIPTION_ID="<your-subscription-id>"
221+
RESOURCE_GROUP="<your-resource-group>"
222+
GEOCATALOG_NAME="<your-geocatalog-name>"
223+
224+
# Construct the resource ID
225+
GEOCATALOG_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Orbital/geoCatalogs/$GEOCATALOG_NAME"
226+
```
227+
228+
1. Verify the GeoCatalog resource exists and you have access:
229+
230+
```azurecli
231+
az resource show --ids $GEOCATALOG_RESOURCE_ID --query "{Name:name, Location:location, Type:type}" -o table
232+
```
233+
234+
1. Find the desired role definition:
235+
236+
237+
```azurecli
238+
az role definition list --name "GeoCatalog Reader" --query "[0].id" -o tsv
239+
```
240+
241+
1. Check if the role assignment already exists:
242+
243+
```azurecli
244+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --query "[?roleDefinitionName=='GeoCatalog Reader']" -o table
245+
```
246+
247+
1. Create the role assignment:
248+
249+
```azurecli
250+
az role assignment create \
251+
--assignee $SP_ID \
252+
--role "GeoCatalog Reader" \
253+
--scope $GEOCATALOG_RESOURCE_ID
254+
```
255+
256+
Example output:
257+
258+
```json
259+
{
260+
"id": "/subscriptions/.../providers/Microsoft.Authorization/roleAssignments/...",
261+
"principalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
262+
"roleDefinitionName": "GeoCatalog Reader",
263+
"scope": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Orbital/geoCatalogs/...",
264+
...
265+
}
266+
```
267+
268+
### Alternative: Assign roles via Azure portal
269+
270+
You can also assign roles through the Azure portal:
271+
272+
1. Sign in to the [Azure portal](https://portal.azure.com/)
273+
1. Navigate to your GeoCatalog resource
274+
1. Select **Access control (IAM)** in the left sidebar
275+
1. Select **Add** > **Add role assignment**
276+
1. Select **GeoCatalog Administrator** or **GeoCatalog Reader** from the list of roles
277+
1. Select **Next**
278+
1. Select **User, group, or service principal**
279+
1. Select **Select members** and search for the partner application name
280+
1. Select the partner application and choose **Select**
281+
1. Select **Review + assign** to complete the assignment
282+
283+
## Verify the configuration
284+
285+
After completing the authorization steps, verify that the partner can access your GeoCatalog:
286+
287+
1. Confirm the service principal exists and has the correct application ID:
288+
289+
```azurecli
290+
az ad sp show --id $SP_ID --query "{DisplayName:displayName, AppId:appId, Id:id}" -o table
291+
```
292+
293+
1. Verify the role assignment:
294+
295+
```azurecli
296+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID -o table
297+
```
298+
299+
1. Notify your partner that authorization is complete. Provide them with:
300+
- The GeoCatalog URI (found in the Azure portal on your GeoCatalog resource's Overview page)
301+
302+
## Grant access to more GeoCatalogs
303+
304+
To grant the same partner access to more GeoCatalog resources, repeat only the [Assign the appropriate GeoCatalog role](#assign-the-appropriate-geocatalog-role) section for each resource. The service principal and admin consent only need to be configured once per tenant.
305+
306+
## Revoke partner access
307+
308+
To remove a partner's access to your GeoCatalog:
309+
310+
### Remove role assignment only
311+
312+
To revoke access to a specific GeoCatalog while preserving access to others:
313+
314+
```azurecli
315+
az role assignment delete --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --role "GeoCatalog Administrator"
316+
```
317+
Or
318+
319+
```azurecli
320+
az role assignment delete --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --role "GeoCatalog Reader"
321+
```
322+
323+
### Remove all access
324+
325+
To completely remove the partner application from your tenant:
326+
327+
```azurecli
328+
# Delete the service principal
329+
az ad sp delete --id $SP_ID
330+
```
331+
332+
> [!WARNING]
333+
> Deleting the service principal removes all role assignments and consent grants for that application across your entire tenant.
334+
335+
## Troubleshooting
336+
337+
### Service principal creation fails
338+
339+
If you receive an error when creating the service principal, verify that:
340+
341+
- The partner's application ID is correct
342+
- The partner's application is configured for multitenant access
343+
- You have Application Administrator or Global Administrator role
344+
345+
### Admin consent fails
346+
347+
If admin consent fails:
348+
349+
- Verify the redirect URI matches the partner's application configuration
350+
- Ensure you're signed in with sufficient privileges (Global Administrator or Application Administrator)
351+
- Check if your tenant has policies that restrict consent to external applications
352+
353+
### Role assignment fails
354+
355+
If the role assignment fails:
356+
357+
- Verify you have Owner role on the GeoCatalog resource
358+
- Confirm the GeoCatalog resource ID is correct
359+
- Ensure the GeoCatalog Administrator role definition exists in your subscription
360+
361+
## Related content
362+
363+
- [Working with partner applications](./working-with-partner-applications.md)
364+
- [Configure a cross-tenant application](./configure-cross-tenant-application.md)
365+
- [Configure application authentication for Microsoft Planetary Computer Pro](./application-authentication.md)
366+
- [Manage access for Microsoft Planetary Computer Pro](./manage-access.md)

0 commit comments

Comments
 (0)