azure通过javascript获取访问令牌

azure通过javascript获取访问令牌,javascript,azure,oauth-2.0,azure-rest-api,Javascript,Azure,Oauth 2.0,Azure Rest Api,我正在尝试从Azure获取访问令牌。我在听教程,但问题是那个家伙在用邮递员。它在postman中也适用于我,但在javascript中失败了,我不明白为什么 函数getAccessToken(){ 获取(`loginUrl}${tenantId}/oauth2/token`{ 方法:“张贴”, 正文:JSON.stringify({ 授予类型:“客户端凭据”, 客户id:clientId, 客户机密:clientSecret, 资源:资源,, }) }) 。然后((响应)=>{ log(JSON

我正在尝试从Azure获取访问令牌。我在听教程,但问题是那个家伙在用邮递员。它在postman中也适用于我,但在javascript中失败了,我不明白为什么

函数getAccessToken(){ 获取(`loginUrl}${tenantId}/oauth2/token`{ 方法:“张贴”, 正文:JSON.stringify({ 授予类型:“客户端凭据”, 客户id:clientId, 客户机密:clientSecret, 资源:资源,, }) }) 。然后((响应)=>{ log(JSON.stringify(response)); }) .catch((错误)=>{ log(JSON.stringify(err)); }); } 证书是好的,即客户ID、机密、Tennanti等。 我还在PowerShell中进行了尝试,效果很好:

Invoke-RestMethod `
    -Uri "$loginUrl$tenantId/oauth2/token" `
    -Method Post `
    -Body @{"grant_type"="client_credentials"; "resource" = $resource; "client_id" = $clientId; "client_secret" = $clientSecret }
但在js上,我得到以下错误:

在'https://login.microsoftonline.com/myTenantId/oauth2/tokenCORS策略已阻止来自源“null”:请求的资源上不存在“访问控制允许源”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源


目前我正在一个HTML文件中运行此脚本以进行测试。

如果我们在HTML页面中直接从与您的网站不同的域调用rest api,我们将收到CORS问题。这是出于安全考虑。有关更多详细信息,请参阅

所以,如果您想在HTML页面中获取Azure AD令牌,我建议您使用包msaljs实现隐式流来获取令牌。该包已修复cors问题。关于如何做到这一点,请参阅


此外,如果您仍然希望使用客户端凭据流在HTML页面中获取令牌。你有两个选择。一种选择是使用代理服务器。代理充当客户端和服务器之间的中介。有关它的详细信息,请参阅HTML文件中的。

,当我们直接从其他域调用rest API时,我们将收到cors问题。有关更多详细信息,请参阅。此外,如果您想在HTML文件中获取Azue AD token,可以使用msaljs实现隐式流来获取token: