c# - Microsoft Graph API 如何创建不记名 msal token

标签 c# .net azure-active-directory azure-ad-graph-api azure-ad-msal

尝试作为基本控制台应用程序中的应用程序(而不是用户)进行身份验证,并获取具有正确范围的访问 token 。我设法获得了 token ,但没有正确的范围。我不确定你是否能够这样做,我错过了什么?

static async Task<string> GetMsalToken()
        {
            const string clientId = "xxxx234a3-7b9f-42341c-86df-3d2349861";
            const string clientSecret = "WX324XXXXXXXXXXXXX";
            var scopes = new List<string>() { "https://graph.microsoft.com/.default" };

            var clientCredential = new Microsoft.Identity.Client.ClientCredential(clientSecret);
            var redirecturi = "msalxxxx234a3-7b9f-42341c-86df-3d2349861://auth";

            var clientApplication = new Microsoft.Identity.Client.ConfidentialClientApplication(clientId, redirecturi, clientCredential, null, null);
            var authenticationResult = await clientApplication.AcquireTokenForClientAsync(scopes);

            return authenticationResult.AccessToken;
        }

最佳答案

您正在 Azure AD V2.0 端点中使用应用程序权限进行客户端凭据身份验证,在此请求中为范围参数传递的值应该是所需资源的资源标识符(应用程序 ID URI),并附有 .默认后缀。例如,Microsoft Graph,值为 https://graph.microsoft.com/.default .

通过客户端凭据流,应用程序使用所有组织的数据,而不是特定用户的数据。在这种情况下,Azure AD 中使用“管理员同意”(管理员同意),并且此同意必须由组织中的管理员完成。当您使用管理员同意时,您所要做的就是转到 https://login.microsoftonline.com/{tenant name}/adminconsent?client_id={application id}&state={some state data}&redirect_uri ={redirect uri}使用网络浏览器。

在管理员同意后,如果您使用 online tool 解码访问 token ,则使用客户端凭据流获取 microsoft graph 的 token 。 ,您可以发现应用程序权限列在 roles Claim 中。请确认您已获得应用程序权限的管理员同意。

Here这是有关将客户端凭据流与 Azure AD V2.0 端点结合使用的教程。

关于c# - Microsoft Graph API 如何创建不记名 msal token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45758207/

相关文章:

Powershell - 使用 AzureAD 模块获取用户的 LastPasswordChangeTimestamp

c# - 查找字符串中最长的单词

.net - SAML 身份提供商的示例 .NET 代码

c#/.net core3.0 System.Text.Json - JsonSerializer.SerializeAsync?

azure - 在VPN外部使用Azure自动登录

c# - 检索 KeyVault Secret 时出现问题

c# - Accord.NET:如何训练 Boost 分类器

c# - 如何检测来自 WPF 应用程序的“锁定此计算机”命令?

c# - 如何从 C++ 下标运算符所在的类中访问它?

c# - 如何强制 VS 2010 跳过未更改的项目的 "builds"?