尝试作为来自基本控制台应用程序的应用程序(而不是用户)进行身份验证,并获取具有正确范围的访问令牌。我设法得到一个令牌,但没有合适的范围。我不确定你是否能够这样做,我错过了什么?
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;
}
答案 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端点的客户端凭据流的教程。