Microsoft Graph:如何让所有组重用通过 ADAL 生成的令牌
Microsoft Graph: how to get all groups reusing the token generated through ADAL
我正在尝试使用 Microsoft Graph,但我有点迷路了。我正在使用 ADAL 通过 AuthenticationContext.AcquireTokenAsync 方法对我的应用程序(应用程序 ID + 密码)进行身份验证。代码如下所示:
AuthenticationContext AuthContext = new AuthenticationContext(Authority);
ClientCredential ClientCredential = new ClientCredential(ClientId, AppKey);
var result = await AuthContext.AcquireTokenAsync(
"https://graph.windows.net",
ClientCredential);
现在,如果我将令牌重新用于 Azure Graph,我可以使用以下代码恢复所有组:
var url = $"https://graph.windows.net/myorganization/groups?api-version=1.6";
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultAccessToken);
var response = await client.GetAsync(url);
if (response.Content != null) {
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
根据文档,我应该使用较新的 Microsoft Graph API,但是当我尝试使用以下代码时遇到了一些问题:
var authenticationProvider = new DelegateAuthenticationProvider(
req.Headers.Authorization = new AuthenticationHeaderValue("bearer",
resultAccessToken.AccessToken);
return Task.CompletedTask;
});
var graph = new GraphServiceClient(authenticationProvider);
var groups = await graph.Groups
.Request()
.GetAsync();
每当我运行这个,我最终得到以下异常:
未处理的异常:System.AggregateException:发生一个或多个错误。 ---> Microsoft.Graph.ServiceException:代码:InvalidAuthenticationToken
消息:访问令牌验证失败。
很明显我在这里遗漏了什么,但是什么? (顺便说一句,我已经设法让一切都与 MSAL 库一起工作,但在这种情况下,我确实需要将我的组件与其他使用 ADAL 的组件集成),
谢谢。
路易斯
AAD Graph 和 Microsoft Graph 具有不同的物理端点。
要调用 AAD 图,您需要一个带有受众声明的令牌 https://graph.windows.net
要调用 Microsoft Graph,您需要一个带有受众声明的令牌 https://graph.microsoft.com
这意味着您需要做两件事:
- 确保您的应用程序配置为 Microsoft Graph。 (这意味着您需要更新应用程序的配置才能调用其他资源)
- 更新您的代码以请求正确资源的令牌。
希望对您有所帮助!
我正在尝试使用 Microsoft Graph,但我有点迷路了。我正在使用 ADAL 通过 AuthenticationContext.AcquireTokenAsync 方法对我的应用程序(应用程序 ID + 密码)进行身份验证。代码如下所示:
AuthenticationContext AuthContext = new AuthenticationContext(Authority);
ClientCredential ClientCredential = new ClientCredential(ClientId, AppKey);
var result = await AuthContext.AcquireTokenAsync(
"https://graph.windows.net",
ClientCredential);
现在,如果我将令牌重新用于 Azure Graph,我可以使用以下代码恢复所有组:
var url = $"https://graph.windows.net/myorganization/groups?api-version=1.6";
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultAccessToken);
var response = await client.GetAsync(url);
if (response.Content != null) {
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
根据文档,我应该使用较新的 Microsoft Graph API,但是当我尝试使用以下代码时遇到了一些问题:
var authenticationProvider = new DelegateAuthenticationProvider(
req.Headers.Authorization = new AuthenticationHeaderValue("bearer",
resultAccessToken.AccessToken);
return Task.CompletedTask;
});
var graph = new GraphServiceClient(authenticationProvider);
var groups = await graph.Groups
.Request()
.GetAsync();
每当我运行这个,我最终得到以下异常:
未处理的异常:System.AggregateException:发生一个或多个错误。 ---> Microsoft.Graph.ServiceException:代码:InvalidAuthenticationToken 消息:访问令牌验证失败。
很明显我在这里遗漏了什么,但是什么? (顺便说一句,我已经设法让一切都与 MSAL 库一起工作,但在这种情况下,我确实需要将我的组件与其他使用 ADAL 的组件集成),
谢谢。
路易斯
AAD Graph 和 Microsoft Graph 具有不同的物理端点。
要调用 AAD 图,您需要一个带有受众声明的令牌 https://graph.windows.net
要调用 Microsoft Graph,您需要一个带有受众声明的令牌 https://graph.microsoft.com
这意味着您需要做两件事:
- 确保您的应用程序配置为 Microsoft Graph。 (这意味着您需要更新应用程序的配置才能调用其他资源)
- 更新您的代码以请求正确资源的令牌。
希望对您有所帮助!