Из документации для объекта OAuth2PermissionGrant поле resourceId поля OAuth2PermissionGrant является objectId объекта ServicePrincipal объект для ресурса:
Указывает objectId участника службы ресурса, к которому предоставлен доступ.
Итак, изарендатору, в котором вы создаете OAuth2PemrissionGrant , вам нужно получить объект ServicePrincipal , соответствующий приложению-ресурсу, которому вы хотите предоставить разрешение, и из этого объекта прочитайте objectId property.
Если у вас есть ресурсное приложение AppId
, вы можете получить соответствующий ServicePrincipal
объект (если он существует) с помощью:
GET https://graph.windows.net/{tenant}/servicePrincipals
?$filter=appId eq '{app-id-guid}'
&api-version=1.6
С помощьюMicrosoft.Azure.ActiveDirectory.GraphClient (я думаю, это то, что вы используете в своем коде), вы должны сделать это с помощью:
graphClient.ServicePrincipals.Where(sp => sp.AppId == "{app-id-guid}")
Если то, что вы должны определить, приложение-ресурс не являетсяидентификатор приложения Guid, но (несколько) дружественный идентификатор URI (например, "https://graph.microsoft.com"),, который вы можете получить соответствующий ServicePrincipal объект, отфильтровав по servicePrincipalNames .
С помощью Azure AD Graph:
GET https://graph.windows.net/{tenant}/servicePrincipals
?$filter=servicePrincipalNames/any(n:n eq 'https://graph.microsoft.com'))
&api-version=1.6
С Microsoft.Azure.ActiveDirectory.GraphClient:
graphClient.ServicePrincipals
.Where(sp => sp.ServicePrincipalNames.Any(n => n == "https://graph.microsoft.com"))