Skip to content

Commit 441400b

Browse files
committed
initial add off third party read write documents
1 parent ef2825b commit 441400b

6 files changed

Lines changed: 713 additions & 0 deletions
Lines changed: 346 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,346 @@
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 permissions it has requested. 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 ad sp show --id $SP_ID --query "oauth2PermissionGrants" -o table
123+
```
124+
125+
### Alternative: Grant consent via Azure portal
126+
127+
You can also grant admin consent through the Microsoft Entra admin center:
128+
129+
1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/)
130+
1. Navigate to **Identity** > **Applications** > **Enterprise applications**
131+
1. Find and select the partner application by name or application ID
132+
1. Select **Permissions** in the left sidebar
133+
1. Select **Grant admin consent for [your tenant]**
134+
1. Review and accept the permissions
135+
136+
## Assign the appropriate GeoCatalog role
137+
138+
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.
139+
140+
> [!NOTE]
141+
> The partner application integration features is currently in preview and does not support a specific, limited access role for data or service provider partners. For this reason, it is recommended during the preview period that customers create a GeoCatalog resource dedicated to a specific partner to prevent access to other, organizational private, data.
142+
143+
### [GeoCatalog Administrator](#tab/geocatalog-administrator)
144+
1. Get your GeoCatalog resource ID:
145+
146+
```azurecli
147+
# Set your resource details
148+
SUBSCRIPTION_ID="<your-subscription-id>"
149+
RESOURCE_GROUP="<your-resource-group>"
150+
GEOCATALOG_NAME="<your-geocatalog-name>"
151+
152+
# Construct the resource ID
153+
GEOCATALOG_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Orbital/geoCatalogs/$GEOCATALOG_NAME"
154+
```
155+
156+
1. Verify the GeoCatalog resource exists and you have access:
157+
158+
```azurecli
159+
az resource show --ids $GEOCATALOG_RESOURCE_ID --query "{Name:name, Location:location, Type:type}" -o table
160+
```
161+
162+
1. Find the desired role definition:
163+
164+
165+
```azurecli
166+
az role definition list --name "GeoCatalog Administrator" --query "[0].id" -o tsv
167+
```
168+
169+
1. Check if the role assignment already exists:
170+
171+
```azurecli
172+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --query "[?roleDefinitionName=='GeoCatalog Administrator']" -o table
173+
```
174+
175+
1. Create the role assignment:
176+
177+
```azurecli
178+
az role assignment create \
179+
--assignee $SP_ID \
180+
--role "GeoCatalog Administrator" \
181+
--scope $GEOCATALOG_RESOURCE_ID
182+
```
183+
184+
Example output:
185+
186+
```json
187+
{
188+
"id": "/subscriptions/.../providers/Microsoft.Authorization/roleAssignments/...",
189+
"principalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
190+
"roleDefinitionName": "GeoCatalog Administrator",
191+
"scope": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Orbital/geoCatalogs/...",
192+
...
193+
}
194+
```
195+
### [GeoCatalog Reader](#tab/geocatalog-reader)
196+
1. Get your GeoCatalog resource ID:
197+
198+
```azurecli
199+
# Set your resource details
200+
SUBSCRIPTION_ID="<your-subscription-id>"
201+
RESOURCE_GROUP="<your-resource-group>"
202+
GEOCATALOG_NAME="<your-geocatalog-name>"
203+
204+
# Construct the resource ID
205+
GEOCATALOG_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Orbital/geoCatalogs/$GEOCATALOG_NAME"
206+
```
207+
208+
1. Verify the GeoCatalog resource exists and you have access:
209+
210+
```azurecli
211+
az resource show --ids $GEOCATALOG_RESOURCE_ID --query "{Name:name, Location:location, Type:type}" -o table
212+
```
213+
214+
1. Find the desired role definition:
215+
216+
217+
```azurecli
218+
az role definition list --name "GeoCatalog Reader" --query "[0].id" -o tsv
219+
```
220+
221+
1. Check if the role assignment already exists:
222+
223+
```azurecli
224+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --query "[?roleDefinitionName=='GeoCatalog Reader']" -o table
225+
```
226+
227+
1. Create the role assignment:
228+
229+
```azurecli
230+
az role assignment create \
231+
--assignee $SP_ID \
232+
--role "GeoCatalog Reader" \
233+
--scope $GEOCATALOG_RESOURCE_ID
234+
```
235+
236+
Example output:
237+
238+
```json
239+
{
240+
"id": "/subscriptions/.../providers/Microsoft.Authorization/roleAssignments/...",
241+
"principalId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
242+
"roleDefinitionName": "GeoCatalog Reader",
243+
"scope": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Orbital/geoCatalogs/...",
244+
...
245+
}
246+
```
247+
248+
### Alternative: Assign roles via Azure portal
249+
250+
You can also assign roles through the Azure portal:
251+
252+
1. Sign in to the [Azure portal](https://portal.azure.com/)
253+
1. Navigate to your GeoCatalog resource
254+
1. Select **Access control (IAM)** in the left sidebar
255+
1. Select **Add** > **Add role assignment**
256+
1. Select **GeoCatalog Administrator** or **GeoCatalog Reader ** from the list of roles
257+
1. Select **Next**
258+
1. Select **User, group, or service principal**
259+
1. Select **Select members** and search for the partner application name
260+
1. Select the partner application and choose **Select**
261+
1. Select **Review + assign** to complete the assignment
262+
263+
## Verify the configuration
264+
265+
After completing the authorization steps, verify that the partner can access your GeoCatalog:
266+
267+
1. Confirm the service principal exists and has the correct application ID:
268+
269+
```azurecli
270+
az ad sp show --id $SP_ID --query "{DisplayName:displayName, AppId:appId, Id:id}" -o table
271+
```
272+
273+
1. Verify the role assignment:
274+
275+
```azurecli
276+
az role assignment list --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID -o table
277+
```
278+
279+
1. Notify your partner that authorization is complete. Provide them with:
280+
- The GeoCatalog URI (found in the Azure portal on your GeoCatalog resource's Overview page)
281+
282+
## Grant access to additional GeoCatalogs
283+
284+
To grant the same partner access to additional GeoCatalog resources, repeat only the [Assign the GeoCatalog Administrator role](#assign-the-geocatalog-administrator-role) section for each resource. The service principal and admin consent only need to be configured once per tenant.
285+
286+
## Revoke partner access
287+
288+
To remove a partner's access to your GeoCatalog:
289+
290+
### Remove role assignment only
291+
292+
To revoke access to a specific GeoCatalog while preserving access to others:
293+
294+
```azurecli
295+
az role assignment delete --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --role "GeoCatalog Administrator"
296+
```
297+
or
298+
299+
```azurecli
300+
az role assignment delete --assignee $SP_ID --scope $GEOCATALOG_RESOURCE_ID --role "GeoCatalog Reader"
301+
```
302+
303+
### Remove all access
304+
305+
To completely remove the partner application from your tenant:
306+
307+
```azurecli
308+
# Delete the service principal
309+
az ad sp delete --id $SP_ID
310+
```
311+
312+
> [!WARNING]
313+
> Deleting the service principal removes all role assignments and consent grants for that application across your entire tenant.
314+
315+
## Troubleshooting
316+
317+
### Service principal creation fails
318+
319+
If you receive an error when creating the service principal, verify that:
320+
321+
- The partner's application ID is correct
322+
- The partner's application is configured for multi-tenant access
323+
- You have Application Administrator or Global Administrator role
324+
325+
### Admin consent fails
326+
327+
If admin consent fails:
328+
329+
- Verify the redirect URI matches the partner's application configuration
330+
- Ensure you're signed in with sufficient privileges (Global Administrator or Application Administrator)
331+
- Check if your tenant has policies that restrict consent to external applications
332+
333+
### Role assignment fails
334+
335+
If the role assignment fails:
336+
337+
- Verify you have Owner role on the GeoCatalog resource
338+
- Confirm the GeoCatalog resource ID is correct
339+
- Ensure the GeoCatalog Administrator role definition exists in your subscription
340+
341+
## Related content
342+
343+
- [Working with partner applications](./working-with-partner-applications.md)
344+
- [Configure a cross-tenant application](./configure-cross-tenant-application.md)
345+
- [Configure application authentication for Microsoft Planetary Computer Pro](./application-authentication.md)
346+
- [Manage access for Microsoft Planetary Computer Pro](./manage-access.md)

0 commit comments

Comments
 (0)