我正在使用JavaScript将Power BI Reports嵌入到另一个应用程序中,并且可以使用下面的JavaScript代码生成访问令牌(Barear),但并非在所有浏览器中都可以使用。它显示在下面的错误消息。
通过CORS策略阻止了对来自源“空”的“ https://login.microsoftonline.com/ <> / oauth2 / token” 处的XMLHttpRequest的访问:对预检请求的响应未通过访问控制检查:否“访问- Control-Allow-Origin'标头出现在请求的资源上。
我添加了必需的请求标头,但结果仍然相同。
var key;
var request = new XMLHttpRequest();
request.open("POST", "https://login.microsoftonline.com/<<tenant_id>>/oauth2/token", true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.setRequestHeader('Access-Control-Allow-Headers', 'x-requested-with');
request.setRequestHeader('Access-Control-Allow-Origin', '*');
request.send("grant_type=client_credentials&client_id=<<clientid>>&client_secret=<<clientsecret>>&resource:<<resourceurl>>"); // specify the credentials to receive the token on request
request.onreadystatechange = function () {
if (request.readyState == request.DONE) {
var response = request.responseText;
var obj = JSON.parse(response);
key = obj.access_token;
token_ = key;
}
}
有任何想法吗?
谢谢!
您永远不应将客户端机密放在前端。
我们建议您为前端使用azure-activedirectory-library-for-js轻松集成AAD。您可以使用Microsoft Online Auth引用No'Access-Control-Allow-Origin'标头以了解详细信息。
client_credentials
grant_type用于仅应用程序场景。如果必须使用客户端凭据流,则需要在应用程序的后端获取访问令牌并将其返回给前端。
非常感谢您的回复,这很有帮助。我尝试了ADAL.js代码,并成功在浏览器URL中获取了id_token。我对RedirectURI有一个后续问题。应该是什么?我将Power BI报表嵌入ServiceNow应用程序中。Azure AD应用程序中的重定向URI应该是什么?Power BI URL或ServiceNow页面URL或其他?