invalid_scope错误AADSTS70011,为什么我收到此错误

时间:2017-09-15 12:42:18

标签: asp.net oauth-2.0 microsoft-graph office365api

public string[] scopes1 = new string[]
{
    "https://graph.microsoft.com/User.Read",
    "https://graph.microsoft.com/User.ReadWrite",
    "https://graph.microsoft.com/User.ReadBasic.All",
    "https://graph.microsoft.com/Mail.Send",
    "https://graph.microsoft.com/Calendars.ReadWrite",
    "https://graph.microsoft.com/Mail.ReadWrite",
    "https://graph.microsoft.com/Files.ReadWrite",

};

public async Task<string> GetAccessToken2()
{
    string url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?";//https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(url);


        // We want the response to be JSON.
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        // Build up the data to POST.
        List<KeyValuePair<string, string>> postData = new List<KeyValuePair<string, string>>();
        postData.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
        postData.Add(new KeyValuePair<string, string>("client_id", appId));
        postData.Add(new KeyValuePair<string, string>("client_secret", appPassword));
        postData.Add(new KeyValuePair<string, string>("response_type", "code"));
        postData.Add(new KeyValuePair<string, string>("response_mode", "query"));
        // postData.Add(new KeyValuePair<string, string>("client_secret", appPassword));               
        //postData.Add(new KeyValuePair<string, string>("client_secret", appPassword));
        postData.Add(new KeyValuePair<string, string>("redirect_uri", "http://localhost/5341/Home/AddC"));
        postData.Add(new KeyValuePair<string, string>("Scope",string.Join(" ", scopes1)));// "openid offline_access https://graph.microsoft.com/mail.read"));
        postData.Add(new KeyValuePair<string, string>("state", "12345"));

        FormUrlEncodedContent content = new FormUrlEncodedContent(postData);

        // Post to the Server and parse the response.
        HttpResponseMessage response = await client.PostAsync("Token", content);
        string jsonString = await response.Content.ReadAsStringAsync();
        object responseData = JsonConvert.DeserializeObject(jsonString);             

        // return the Access Token.
        return ((dynamic)responseData).access_token;
    }
}
  

{“error”:“invalid_scope”,“error_description”:“AADSTS70011:The   输入参数“scope”的提供值无效。范围   https://graph.microsoft.com/User.Read   https://graph.microsoft.com/User.ReadWrite   https://graph.microsoft.com/User.ReadBasic.All   https://graph.microsoft.com/Mail.Send   https://graph.microsoft.com/Calendars.ReadWrite   https://graph.microsoft.com/Mail.ReadWrite   https://graph.microsoft.com/Files.ReadWrite无效。\ r \ nTrace ID:   17e465ac-9aca-4615-8021-f48ee8f00900 \ r \ n相关ID:   47a584ed-07ca-4a51-bdd1-8cb7364de3ee \ r \ n时间戳:2017-09-15   12:39:26Z “ ”error_codes“:[70011], ”时间戳“:” 2017年9月15日   12:39:26Z”, “trace_id的”: “17e465ac-9aca-4615-8021-f48ee8f00900”, “CORRELATION_ID”: “47a584ed-07ca-4a51-bdd1-8cb7364de3ee”}

2 个答案:

答案 0 :(得分:1)

https://login.microsoftonline.com/common/oauth2/v2.0/authorize的来电是HTTP GET,而不是POST。回调函数采用授权代码并向POST发出https://login.microsoftonline.com/common/oauth2/v2.0/token

初始GET的原型是(可读性新线):

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=[APPLICATION ID]&
response_type=code&
redirect_uri=[REDIRECT URI]&
scope=[SCOPE]

第二阶段发出POST。那个原型是:

POST URL: https://login.microsoftonline.com/common/oauth2/v2.0/token
POST HEADER: Content-Type: application/x-www-form-urlencoded
POST BODY: grant_type=authorization_code&code=[AUTHORIZATION CODE]&
           client_id=[APPLICATION ID]&client_secret=[PASSWORD]
           &scope=[SCOPE]&redirect_uri=[REDIRECT URI]

同样不是这不是JSON,Content-Typeapplication/x-www-form-urlencoded

前段时间我写了一篇文章,通过使用v2端点的授权代码流程,您可能会发现它很有帮助:Microsoft v2 Endpoint Primer

答案 1 :(得分:0)

https://login.microsoftonline.com/{{tenant_id}}/oauth2/token

删除 v2.0 版本并尝试。 我有同样的错误代码

<块引用>

"error_codes": [ 70011 ], 所以它可以解决您的问题