gpt4 book ai didi

c# - 访问图形 API 时访问 token 问题

转载 作者:行者123 更新时间:2023-11-30 21:44:39 24 4
gpt4 key购买 nike

我正在使用下面的代码使用图形 API 从 azure AD 中获取用户,但不知何故我在这样做时遇到了 token 访问问题。

static async void MakeRequest()
{
var client = new HttpClient();

var queryString = HttpUtility.ParseQueryString(string.Empty);

/* OAuth2 is required to access this API. For more information visit:
https://msdn.microsoft.com/en-us/office/office365/howto/common-app-authentication-tasks */



// Specify values for the following required parameters
queryString["api-version"] = "1.6";
// Specify values for path parameters (shown as {...})
// var uri = "https://graph.windows.net/microsoft.onmicrosoft.com/users/{v-sidmis@microsoft.com}?" + queryString;

var uri = "https://graph.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/users?api-version=1.6";

var response = await client.GetAsync(uri);

if (response.Content != null)
{
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}


}

此代码取自 TechNet。

最佳答案

这取决于您希望如何获取 token 。有很多场景可以将应用程序与 Azure AD 集成。您可以从 here 引用它。

例如,如果您想在守护程序或服务应用程序中使用 Azure AD Graph,我们可以使用Client Credential flow

1 。首先我们需要在portal上注册一个web应用(具体步骤引用here),并授予读取目录数据的权限,如下图: enter image description here

2。然后我们可以从门户中获取clientIdsecrettenantId并使用下面的代码获取token(需要安装Active Directory Authentication Library)

string authority = "https://login.microsoftonline.com/{tenantId}";
string clientId = "";
string secret = "";
string resrouce = "https://graph.windows.net";

var credential = new ClientCredential(clientId, secret);
AuthenticationContext authContext = new AuthenticationContext(authority);

var token = authContext.AcquireTokenAsync(resrouce, credential).Result.AccessToken;

Console.WriteLine(token);

3。然后我们可以使用此 token 直接调用 Azure AD Graph REST,或者我们可以使用 graph client library for Azure AD 来检索用户。以下是供您引用的代码示例:

//use the Azure AD client library
string accessToken = "";
string tenantId = "";
string graphResourceId = "https://graph.windows.net";

Uri servicePointUri = new Uri(graphResourceId);
Uri serviceRoot = new Uri(servicePointUri, tenantId);

ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot, async () => await Task.FromResult(accessToken));

foreach(var user in client.Users.ExecuteAsync().Result.CurrentPage)
Console.WriteLine(user.DisplayName);

//using the HTTP request
var client = new HttpClient();
var tenantId = "";
var uri = $"https://graph.windows.net/{tenantId}/users?api-version=1.6";
var token = "";
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", token);
var response = client.GetAsync(uri).Result;
var result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);

更新

当您创建应用程序时,Web 应用程序/Web API 可以保密。然后您可以通过 key 部分生成 key ,如下图所示。保存应用程序后,您现在可以复制 key 。 enter image description here

关于c# - 访问图形 API 时访问 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com