Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft graph API如何创建承载msal令牌_C#_.net_Azure Active Directory_Azure Ad Graph Api_Msal - Fatal编程技术网

C# Microsoft graph API如何创建承载msal令牌

C# Microsoft graph API如何创建承载msal令牌,c#,.net,azure-active-directory,azure-ad-graph-api,msal,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 cli

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

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;
        }
静态异步任务GetMsalToken()
{
常量字符串clientId=“XX234A3-7b9f-42341c-86df-3d2349861”;
常量字符串clientSecret=“wx324xxxxxxxxxxxx”;
var scopes=new List(){”https://graph.microsoft.com/.default" };
var clientCredential=新的Microsoft.Identity.Client.clientCredential(clientSecret);
var redirecturi=“msalxxx234a3-7b9f-42341c-86df-3d2349861://auth”;
var clientApplication=新的Microsoft.Identity.Client.SecretentialClientApplication(clientId、redirecturi、clientCredential、null、null);
var authenticationResult=await clientApplication.AcquireTokenForClientAsync(作用域);
返回authenticationResult.AccessToken;
}

如果您正在Azure AD V2.0端点中使用应用程序权限使用客户端凭据身份验证,则此请求中传递给作用域参数的值应为所需资源的资源标识符(应用程序ID URI),并带有.default后缀。例如,Microsoft Graph的值为

对于客户端凭据流,应用程序使用所有组织的数据,而不是特定用户的数据。在这种情况下,Azure AD中使用“管理员同意”(admin Approve),该同意必须由组织中的管理员完成。使用管理员许可时,您只需转到
https://login.microsoftonline.com/{租户名称}/AdminApprove?客户端{应用程序id}&state={一些状态数据}&redirect{重定向uri}
使用web浏览器

在管理员同意后,使用客户端凭据流获取microsoft graph的令牌,如果您使用解码您的访问令牌,您可以在
角色
声明中找到应用程序权限。请确认您已获得应用程序权限的管理员同意


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

您得到了什么范围以及您想要什么范围?据我所知,目前我根本没有得到任何范围。默认值是用于获取应用程序注册门户中定义的范围,还是我错了!?在这里,我定义了几个作用域,User.Read.All e.gw为什么不尝试将作用域直接传递到“scopes”变量中?当我这样做时,我会收到一个异常,说我传递的是未知作用域!?唯一有效的变量是.default!?你应该准确地分享你所传递的信息以获得错误。谢谢Nan,它终于起作用了,我基本上遵循了链接。。所以哪一个因素引起了你的问题,如果回答有帮助,请考虑接受回答,这可以帮助其他遇到同样问题的人。