我想生成令牌以在 SharePoint Online 串列中執行 CRUD 操作。我能夠在 Postman 中生成令牌。但我希望它在我的 React 應用程式中自動生成以執行 CRUD 操作。我從 Postman 復制了代碼片段并粘貼到我的 React 應用程式中,但它拋出了錯誤。這是錯誤:
UsingFetch.js:181 POST https://accounts.accesscontrol.windows.net/834fb7b4-624d-4de8-a977-2d46ad979bd9/tokens/OAuth/2 400 (Bad Request)
{"error":"invalid_request","error_description":"AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: d2dcb2da-1aae-4af2-a3e3-aabc35ce4301\r\nCorrelation ID: c90dff14-b64d-4f47-a01c-dfe498ec2f40\r\nTimestamp: 2022-02-23 09:07:45Z","error_codes":[900144],"timestamp":"2022-02-23 09:07:45Z","trace_id":"d2dcb2da-1aae-4af2-a3e3-aabc35ce4301","correlation_id":"c90dff14-b64d-4f47-a01c-dfe498ec2f40","error_uri":"https://accounts.accesscontrol.windows.net/error?code=900144"}
這里是截圖
這是我從 Postman 復制的代碼片段:
const generateToken = async () => {
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
myHeaders.append(
"Cookie",
"esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrQx7IG43UK7gipYHXtqZImLB1jfBLK4PTkZlgLq3BvpTizt3xt8EZQrpUJGa0hTnSdpRf-AenJvnGNABiv2cWYWSyJj9QNm-vWalRGHuDZ6Km_DaX_5CQHUa4H8U-osEGCM48buOyj0G819e1NoxuvoOD6fZvMI5nnDWZyjNa1mogAA; fpc=An1vbDtRI8BAiCLlUBBGpFXf9_srAQAAACDgp9kOAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd"
);
var formdata = new FormData();
formdata.append("grant_type", "client_credentials");
formdata.append(
"client_id",
"myclientid"
);
formdata.append(
"client_secret",
"mysecretcode"
);
formdata.append(
"resource",
"00000003-0000-0ff1-ce00-000000000000/cooponline.sharepoint.com@834fb7b4-624d-4de8-a977-2d46ad979bd9"
);
var requestOptions = {
method: "POST",
headers: myHeaders,
body: formdata,
redirect: "follow",
};
await fetch(
"https://accounts.accesscontrol.windows.net/834fb7b4-624d-4de8-a977-2d46ad979bd9/tokens/OAuth/2",
requestOptions
)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.log("error", error));
};
誰能給我一個解決方案?謝謝你。
uj5u.com熱心網友回復:
這個錯誤說明出了什么問題:The request body must contain the following parameter: 'grant_type'。
要解決此問題,只需將其添加為引數(formData在本例中)。根據SharePoint 檔案,此值必須設定為client_credentials.
formdata.append(
"grant_type",
"client_credentials"
);
編輯:
顯然,請求正文的格式不尋常。您正嘗試將其發送為application/json,但 MS 期望application/x-www-form-urlencoded這樣:
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https://graph.microsoft.com/.default
&client_secret=sampleCredentia1s
&grant_type=client_credentials
因此,與其將formData物件作為請求正文傳遞,不如將其包裝成這樣的字串:
const body = Object.keys(formData)
.map(key => `${key}=${formData[key]}`)
.join('&');
并將其作為身體傳遞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/434644.html
