Azure AD配置响应jwt可以验证令牌

iih3973s  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(116)

我希望Azure响应jwt令牌登录后进行验证。现在的事情是,收到了一个用于Microsoft Graph的令牌。只是因为它在头中也附加了一个nonce,因为就我所搜索的而言,带有nonce的令牌无法被验证。


的数据
我想使用令牌对用C# API编写的应用程序进行身份验证。

1hdlvixo

1hdlvixo1#

我使用下面的代码来生成访问令牌,并使用访问令牌访问Microsoft Graph API:

  • 对于 sample,我尝试使用Client凭据流列出用户:*

我创建了一个Azure AD应用,并授予了API权限:
x1c 0d1x的数据

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生成的。

因此,当您尝试解码Microsoft Graph访问令牌时,将发生无效签名错误,并且不需要解码访问令牌。



我同意 @jdweng 的说法,根据你的需求,你可以选择身份验证流程。参考此MsDoc

参考文献:

jwt -使用Azure AD租户ID -以及为“应用注册”颁发的有效令牌。签名验证失败-堆栈溢出由我。
List users - Microsoft Graph v1.0

相关问题