AADSTS70011:输入参数“ scope”提供的值无效

时间:2018-08-10 08:08:31

标签: c# microsoft-graph

因此,我有一个方案,在该方案中,应在某些条件下将用户添加到组中。此外,当应用程序开始运行时,也不应要求用户登录其Microsoft ID / PWD。因此,我访问创建了Graph Service Client对象的令牌,如下所示:

GraphServiceClient graphClient = new GraphServiceClient(
    "https://graph.microsoft.com/v1.0", 
    new DelegateAuthenticationProvider(
        async (requestMessage) =>
        {
            string clientId = "My APP ID";
            string authorityFormat = "https://login.microsoftonline.com/{0}/v2.0";
            string tenantId = "tenant GUID";
            string[] _scopes = new string[] { 
                "https://graph.microsoft.com/User.ReadBasic.All" 
            };
            // Custom Redirect URI asigned in the Application Registration 
            // Portal in the native Application Platform
            string redirectUri = "https://localhost:4803/"; 
            string clientSecret = "App Secret";
            ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(
                clientId, 
                String.Format(authorityFormat, tenantId), 
                redirectUri, 
                new ClientCredential(clientSecret), 
                null, new TokenCache()
            );
            AuthenticationResult authResult = await daemonClient.AcquireTokenForClientAsync(_scopes);
            string token = authResult.AccessToken;
            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
        }
   )
);

所以我尝试执行 var user = await graphClient.Me.Request().GetAsync();

我收到错误消息:

  

AADSTS70011:输入参数'scope'的提供值无效。范围user.read无效。

我也尝试仅使用User.ReadBasic作为范围,但得到相同的错误。 我在这里做什么错了?

2 个答案:

答案 0 :(得分:3)

您在此处使用客户端凭据流,这意味着您不能动态请求范围。您必须在apps.dev.microsoft.com上的应用程序注册上配置所需的权限范围,然后将代码中的范围值设置为https://graph.microsoft.com/.default

有关更多详细信息,请参见https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

答案 1 :(得分:0)

我从另一个为用户而非组织工作的授权中复制了代码。 所以我收到错误是因为我的 grant_type 错误。

确保您的是“client_credentials”