postman 尝试通过sharepoint加载项中的javascript获取Sharepoint rest API调用的访问令牌,面临CORS策略错误问题

snz8szmq  于 2023-04-06  发布在  Postman
关注(0)|答案(1)|浏览(172)

我们正在尝试创建一个Sharepoint插件。在那里,我需要生成访问令牌,用于进行一些Sharepoint REST API调用。我能够从 Postman 生成,但在Sharepoint插件中从Javascript代码执行时,它向我显示CORS策略错误。错误如下:
CORS策略已阻止从源“https://www.example.com”获取“https://accounts.accesscontrol.windows.net/ {TenantID}/tokens/oAuth/2”DomainName-d9cbe540d4fdef.sharepoint.com:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no-cors”以在禁用CORS的情况下提取资源。

const tokenRequest = {
    grant_type: "client_credentials",
    client_id: "clientID@TenantID",
    client_secret: "Secret Value",
    resource: "00000003-0000-0ff1-ce00-000000000000/domain@tenantID",
};

const endpoint = 'https://accounts.accesscontrol.windows.net/{TenantID}/tokens/oAuth/2';
// Make token request and handle response
fetch(endpoint, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        crossorigin: true,
        mode: 'no-cors'
    },
    body: new URLSearchParams(tokenRequest),
})
    .then(response => response.json())
    .then(data => console.log(data.access_token))
    .catch(error => console.error(error));

在javascript中生成用于调用sharepoint rest API的令牌。

mfuanj7w

mfuanj7w1#

进行“应用程序身份验证”(这意味着使用具有自己权限的凭据,而不是使用连接的用户上下文)是一个很大的禁忌,因为它是一扇安全的大门,因为您必须在前端开发中公开存储凭据。
在这种情况下,您必须有一个后端来发出请求:Azure Function、Web App、树莓派服务器、Logic Apps、Power Automate ......无论您决定什么,但后端必须进行“应用程序”调用。
在浏览器环境中所期望的实际上是Microsoft宇宙中的三条腿身份验证,这意味着您希望使用连接的用户以他的名义进行查询。为此,您必须使用OAuth,并且AAD应用程序被允许使用用户上下文。

相关问题