using Azure.Identity;
using Azure.Core;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var credential = new ClientSecretCredential(
"TenantID",
"ClientID",
"ClientSecret"
);
var tokenRequestContext = new TokenRequestContext(
new[] { "https://graph.microsoft.com/.default" }
);
var accessToken = (await credential.GetTokenAsync(tokenRequestContext)).Token;
Console.WriteLine(accessToken);
await ListUsersAsync(accessToken);
}
static async Task ListUsersAsync(string accessToken)
{
try
{
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await httpClient.GetAsync("https://graph.microsoft.com/v1.0/users");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var users = JsonSerializer.Deserialize<GraphUsersResponse>(content);
foreach (var user in users.value)
{
Console.WriteLine($"User: {user.displayName}");
}
}
else
{
Console.WriteLine($"Failed to retrieve users. Status code: {response.StatusCode}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
public class GraphUser
{
public string displayName { get; set; }
}
public class GraphUsersResponse
{
public List<GraphUser> value { get; set; }
}
}
字符串 使用生成的访问令牌,我能够成功列出Azure AD用户,如下所示:
的
我同意你的观点,* Microsoft Graph生成的访问令牌不需要验证,因为它不是为API生成的。
1条答案
按热度按时间1hdlvixo1#
我使用下面的代码来生成访问令牌,并使用访问令牌访问Microsoft Graph API:
我创建了一个Azure AD应用,并授予了API权限:
x1c 0d1x的数据
字符串
使用生成的访问令牌,我能够成功列出Azure AD用户,如下所示:
的
因此,当您尝试解码Microsoft Graph访问令牌时,将发生无效签名错误,并且不需要解码访问令牌。
的
我同意 @jdweng 的说法,根据你的需求,你可以选择身份验证流程。参考此MsDoc。
参考文献:
jwt -使用Azure AD租户ID -以及为“应用注册”颁发的有效令牌。签名验证失败-堆栈溢出由我。
List users - Microsoft Graph v1.0的