#c# #microsoft-graph-api
#c# #microsoft-graph-api
Вопрос:
Я искал в Интернете и SO и нашел только один ответ на тот же вопрос; но это было специфично для программирования на Android, и я не видел четкого способа перенести его на C #.
Я хотел бы знать, как это можно сделать с помощью C #. Фрагменты кода или реальный пример были бы великолепны.
В принципе, у меня есть зарегистрированное приложение в Azure, и мне нужно знать, как получить все разрешения, предоставленные приложению с помощью кода.
Это будет включать как делегированные, так и специфические для приложения разрешения.
Как бы это сделать? Связанная ссылка тоже была бы хороша, но я ничего не смог найти. В списке перечислены REST API для поиска разрешений для групп, пользователей, папок и т. Д. Ничто из того, что я нашел, не показывает API для перечисления разрешений приложений.
Ответ №1:
Поддерживается получение разрешений приложения через GET /applications/{id}
конечную точку, но только в /beta
версии на данный момент
API-интерфейсы в версии / beta в Microsoft Graph могут быть изменены. Использование этих API в производственных приложениях не поддерживается.
Подробные сведения
Конечная GET /applications/{id}/requiredResourceAccess
точка возвращает RequiredResourceAccess
коллекцию, которая:
ресурсы, к которым требуется доступ для этого приложения, и набор областей разрешений OAuth и ролей приложения, которые ему нужны для каждого из этих ресурсов
Пример C # (через msgraph-sdk-dotnet
библиотеку)
var requestUrl = $"{graphClient.BaseUrl}/applications/{id}/requiredResourceAccess";
var message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);
var content = await response.Content.ReadAsStringAsync();
var resourceAccesses = JsonConvert.DeserializeObject<List<RequiredResourceAccess>>(JObject.Parse(content)["value"].ToString());
где
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class RequiredResourceAccess
{
/// <summary>
/// The unique identifier for the resource that the application requires access to.
/// This should be equal to the appId declared on the target resource application
/// </summary>
[JsonProperty("resourceAppId")]
public string ResourceAppId { get; set; }
/// <summary>
/// The list of OAuth2.0 permission scopes and app roles that the application requires from the specified resource.
/// </summary>
[JsonProperty("resourceAccess")]
public List<ResourceAccess> ResourceAccess { get; set; }
}
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class ResourceAccess
{
/// <summary>
/// The unique identifier for one of the oAuth2Permission or appRole instances that the resource application exposes.
/// </summary>
[JsonProperty("id")]
public string Id { get; set; }
/// <summary>
/// Specifies whether the id property references an oAuth2Permission or an appRole. Possible values are "scope" or "role".
/// </summary>
[JsonProperty("type")]
public string Type { get; set; }
}
Поскольку предоставленная конечная точка возвращает результат в следующем формате:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#applications('e7de2f36-a0c1-4573-91bd-c854eaff0852')/requiredResourceAccess",
"value": [
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "1ec239c2-d7c9-4623-a91a-a9775856bb36",
"type": "Scope"
},
//...
]
},
{
"resourceAppId": "00000003-0000-0ff1-ce00-000000000000",
"resourceAccess": [
{
"id": "d13f72ca-a275-4b96-b789-48ebcc4da984",
"type": "Role"
}
]
}
]
}
возможно, вам захочется получить сведения о ресурсе, к которому приложению требуется доступ, и областях разрешений (например, API и имя разрешения, которое отображается на странице разрешений API портала Azure)
В этом отношении можно использовать GET /servicePrincipals
конечную точку.
Пример:
Для ресурса с идентификатором 00000003-0000-0000-c000-000000000000
запрос https://graph.microsoft.com/beta/servicePrincipals?filter=appId eq '00000003-0000-0000-c000-000000000000'
возвращает следующий ответ:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#servicePrincipals",
"value": [
{
"id": "414583a1-9d42-4309-aa10-3bf73ff7f95e",
"appDisplayName": "Microsoft Graph",
"appId": "00000003-0000-0000-c000-000000000000",
//...
"publishedPermissionScopes": [
{
"adminConsentDescription": "Allows the app to create, read, update, and delete events in user calendars. ",
"adminConsentDisplayName": "Have full access to user calendars ",
"id": "1ec239c2-d7c9-4623-a91a-a9775856bb36",
"isEnabled": true,
"type": "User",
"userConsentDescription": "Allows the app to read, update, create and delete events in your calendars. ",
"userConsentDisplayName": "Have full access to your calendars ",
"value": "Calendars.ReadWrite"
},
//...
]
}
]
}
который содержит сведения о ресурсах (например appDisplayName:Microsoft Graph
) и областях разрешений (например value:Calendars.ReadWrite
)
Комментарии:
1. Спасибо! Это идеально.