簡體   English   中英

在 javascript Azure Z86408593C34AF77FDDZ0DF932F8B5261 內調用圖 API

[英]Calling Graph API inside a javascript Azure Function

我對 Azure 函數很陌生。 我正在嘗試使用 HTTP 觸發的 Azure Function 中的圖形 API。 我發現很少有與這個論點相關的文檔。 還有幾個關於 Stack Overflow 的問題,但是所有的材料都很老了,Graph 和 Azure 的功能都從那時起得到了改進。 當我剛剛創建 function 時,它工作得很好。 如果我簡單地將綁定添加到 Auth 令牌( https://graph.microsoft.com ),甚至不接觸 index.js,function 停止工作並返回錯誤。 連接嘗試甚至沒有登錄監視器或 Applications Insights。 我正在直接從 Azure 門戶(無本地部署)構建 function。 我已經在 AAD 上創建了一個應用程序並更改了我的 function 應用程序上的身份驗證以連接到此應用程序。 還在 Microsoft Graph 上授權了 Azure 用戶(通過 Graph Explorer),但仍然收到此 404 錯誤。 我應該檢查什么?

根據 Tony Ju 的回答進行編輯:

按照建議,我關閉了 App Service Authentication 並按照此處的步驟操作。 我只是更改了一些東西以使其在 Azure Function 中工作(該帖子是針對純 Node.js 的)。 實際上,這是我的 index.js:

const APP_ID = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
const APP_SECERET = 'XXXX~-XXX~XXXXXXXXXXXXX~XXXXXXXXX~';
const TOKEN_ENDPOINT ='https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/oauth2/v2.0/token';
const MS_GRAPH_SCOPE = 'https://graph.microsoft.com/.default';

const axios = require('axios');
const qs = require('qs');

const postData = {
  client_id: APP_ID,
  scope: MS_GRAPH_SCOPE,
  client_secret: APP_SECERET,
  grant_type: 'client_credentials'
};


module.exports = function (context, req) {
    axios.defaults.headers.post['Content-Type'] =
  'application/x-www-form-urlencoded';

    let token = '';

    axios
    .post(TOKEN_ENDPOINT, qs.stringify(postData))
    .then(response => {
        context.log(response.data);
    })
    .catch(error => {
        context.log(error);
    });
};

XXXX 分別取自 AAD 應用程序:應用程序(客戶端)ID、應用程序客戶端密鑰和目錄(租戶)ID。

我的 function.json 如下:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "name": "graphToken",
      "direction": "in",
      "type": "token",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    }
  ]
}

仍然得到 404 錯誤。 似乎與代碼無關,但與 function 綁定有關。

根據 Tony Ju 的新評論和進一步的實驗進行編輯:

感謝 Tony:不需要身份驗證綁定。

還需要 go 到 Function 應用服務,然后到控制台(在開發工具下)並發出

npm install axios
npm install qs

此外,在我之前的 index.js 清單中,function 需要異步:

module.exports = async function (context, req) {

這樣,它就起作用了。 謝謝托尼。

我已經在 AAD 上創建了一個應用程序並更改了我的 function 應用程序上的身份驗證以連接到此應用程序。

根據您的描述,您已啟用對 function 的身份驗證。 在這種情況下,您可以在此處參考答案。

如果您不想在 function 中添加身份驗證,而只想在 function 中調用 Microsoft API。 您可以使用客戶端憑據流 在此處參考我的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM