Как динамически получить разрешение на использование Microsoft Graph API?C#

Место общения программистов C#
Anonymous
Как динамически получить разрешение на использование Microsoft Graph API?

Сообщение Anonymous »

Я написал базовую программу на C# для тестирования Microsoft Graph API, но для этого я настроил разрешение для вызовов API с портала Azure. Есть ли лучший способ сделать это? любой динамический способ настройки разрешений API в зависимости от вызовов API, которые я добавляю в код, а не настраиваю их вручную на портале Azure.
GraphHandler.cs
public class GraphHandler
{
public GraphServiceClient GraphClient { get; private set; }

public GraphHandler(string tenantId, string clientId, string clientSecret)
{
GraphClient = CreateGraphClient(tenantId, clientId, clientSecret);
}
public GraphServiceClient CreateGraphClient(string tenantId, string clientId, string clientSecret)
{
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};

var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var scopes = new[] { "https://graph.microsoft.com/.default" };

return new GraphServiceClient(clientSecretCredential, scopes);
}

public async Task GetUser(string userPrincipalName)
{
return await GraphClient.Users[userPrincipalName].GetAsync();
}

public async Task GetSharepointSites()
{
var sites = (await GraphClient.Sites.GetAllSites.GetAsync())?.Value;
if(sites == null)
{
return (null, null);
}

sites.RemoveAll(x => string.IsNullOrEmpty(x.DisplayName));

var spSites = new List();
var oneDriveSites = new List();

foreach (var site in sites)
{
if (site == null) continue;

var compare = site.WebUrl?.Split(site.SiteCollection?.Hostname)[1].Split("/");
if (compare.All(x => !string.IsNullOrEmpty(x)) || compare.Length < 1)
{
continue;
}

if (compare[1] == "sites" || string.IsNullOrEmpty(compare[1]))
spSites.Add(site);
else if (compare[1] == "personal")
oneDriveSites.Add(site);
}

return (spSites, oneDriveSites);
}
}


Program.cs
string tenantId = "INPUT TENANT ID";
string clientId = "INPUT CLIENT ID";
string clientSecret = "INPUT CLIENT SECRET";

var graphHandler = new GraphHandler(tenantId, clientId, clientSecret);

Console.WriteLine("Get display name of user:");
var user = await graphHandler.GetUser("mail@example.com");
Console.WriteLine(user?.DisplayName);

Console.WriteLine("Get all sharepoint sites in tenant");
var spSites = (await graphHandler.GetSharepointSites()).Item1;
foreach (var site in spSites)
{
Console.WriteLine(site.DisplayName);
}

Console.ReadLine();


Подробнее здесь: https://stackoverflow.com/questions/785 ... ynamically

Вернуться в «C#»