Azure active directory 使用普通JavaScript获取Microsoft graph api的访问令牌

Azure active directory 使用普通JavaScript获取Microsoft graph api的访问令牌,azure-active-directory,sharepoint-2013,microsoft-graph-api,Azure Active Directory,Sharepoint 2013,Microsoft Graph Api,我尝试使用ajax调用使用Microsoft graph api获取planner数据,但得到400(错误请求): 正在从planner中查找json数据,但获取错误代码 400(错误请求)。首先,您现在共享的代码存在两个主要问题: 您不应该使用客户端凭据(即clientId和Client secret)从客户端JavaScript代码调用Microsoft Graph API,它只适用于守护进程或服务等机密客户端 不管怎么说,你是在试图击中endponthttps://graph.micros

我尝试使用ajax调用使用Microsoft graph api获取planner数据,但得到400(错误请求):

正在从planner中查找json数据,但获取错误代码
400(错误请求)。首先,您现在共享的代码存在两个主要问题:

  • 您不应该使用客户端凭据(即clientId和Client secret)从客户端JavaScript代码调用Microsoft Graph API,它只适用于守护进程或服务等机密客户端

  • 不管怎么说,你是在试图击中endpont
    https://graph.microsoft.com/v1.0/me/planner/tasks
    ,其中包括仅对用户身份有效的关键字
    me
    。因此,您应该尝试使用当前登录的用户的身份获取令牌,或者在用户未登录时提示用户

  • 您可以使用调用Microsoft Graph

    客户端库的链接还提供了很好的示例代码分步指导


    注意:请不要将您的客户机密或任何其他敏感信息作为您在stackoverflow上的问题的一部分。现在我将编辑这个问题,但是你仍然应该删除应用程序的这个特殊秘密,并生成新的秘密以备将来使用。

    是的,将客户端秘密放入JavaScript是一个非常糟糕的主意,因为任何使用该网站的人都可以获得应用程序的密码。AAD的令牌端点阻止您在这里自食其果。嗨,rohit,我参考了Microsoft Graph JavaScript客户端库的链接,通过该链接,我探索了用于Graph api身份验证和获取数据的纯java脚本。我使用此引用在客户端出错。你能用这封信向我澄清一下吗。
    function requestToken() {
            $.ajax({
                "async": true,
                "crossDomain": true,
                "url": "https://cors-anywhere.herokuapp.com/https://login.microsoftonline.com/common/oauth2/v2.0/token", // Pass your tenant name instead of sharepointtechie
                "method": "POST",
                "headers": {
                    "content-type": "application/x-www-form-urlencoded"
                },
                "data": {
                    "grant_type": "client_credentials",
                    "client_id ": "--REDACTED--", //Provide your app id
                    "client_secret": "--REDACTED--",
    
                                         //Provide your client secret genereated from your app
                    "scope ": "https://graph.microsoft.com/.default"
                },
                success: function (response) {
                    console.log(response);
                    token = response.access_token;
    
    
                    $.ajax({
                        url: 'https://graph.microsoft.com/v1.0/me/planner/tasks',
                        type: 'GET',
                        dataType: 'json',
                        beforeSend: function (xhr) {
                            xhr.setRequestHeader('Authorization', 'Bearer '+token+'');
                        },
                        data: {},
                        success: function (results) {                            
                            console.log(results);
                            debugger;
                        },
                        error: function (error) {
                            console.log("Error in getting data: " + error);
                        }
                    });
                }
    
            })
        }