Microsoft图形API如何创建承载msal令牌

时间:2017-08-18 13:44:25

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

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

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;
        }

1 个答案:

答案 0 :(得分:2)

您正在使用Azure AD V2.0端点中的应用程序权限进行客户端凭据身份验证,此请求中为scope参数传递的值应该是您所需资源的资源标识符(Application 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解码访问令牌,您可以在roles声明中找到应用程序权限。请确认您已获得应用程序权限的管理员同意。

Here是一个使用Azure AD V2.0端点的客户端凭据流的教程。