跨域资源共享(CORS)策略阻止了从“http://localhost:4200”源访问“https://login.microsoftonline.com/xxx”的XMLHttpRequest。

3
似乎是一个重复的问题,但我无法解决它。我有一个使用Msal强制用户登录的Angular 6应用程序。成功登录后,我向aad的令牌端点发出请求,传递服务主体凭据(应用程序的应用ID和客户机密)以获取访问图形API的访问令牌,如此处所示。这就是我遇到CORS策略错误的地方。
当我禁用Chrome浏览器安全性时,我没有遇到任何CORS错误,并且能够获得访问令牌。
为什么只有在尝试使用服务主体凭据获取访问令牌时才会收到CORS错误,而在使用msal进行用户登录时却没有?
我需要在浏览器端添加任何脚本才能使其正常工作吗?
如何在不 compromising 安全性的情况下实现它?
登录机构是:https://login.microsoftonline.com/{tenant id}/
服务主体的令牌端点是:https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/token

你在Azure门户上启用了CORS来源策略吗?你的应用程序使用哪种安全协议? - Md Farid Uddin Kiron
尝试使用 "withCredentials = true"。更多信息请参见:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials - J. Pinxten
@MdFaridUddinKiron,我正在向Azure Active Directory的令牌终结点发送请求。我在服务器端没有控制权。 - Saravanan
@J.Pinxten withCredentials 没有起作用。 - Saravanan
@Saravanan,你在客户端使用哪种安全协议? - Md Farid Uddin Kiron
@Saravanan 如果您有任何疑问,请在评论区中随时提出。谢谢。 - Md Farid Uddin Kiron
1个回答

1
通常传统或常规网页可以使用XMLHttpRequest对象从远程服务器发送和接收数据,但它们受到同源策略的限制。因此,出于安全原因,浏览器会阻止它,通常只允许在相同来源的请求。尽管Postman可以处理这种请求,因为它们不受此策略的限制。
要在JavaScript中集成Azure Active Directory,建议使用azure-active-directory-library-for-js,这是一个JavaScript库,用于前端轻松集成Azure Active Directory,通过使用implicit grant flow,它还具有消除跨域调用的任何要求的优点,如果需要JavaScript应用程序联系令牌端点。您还可以查看Here是一个讨论相同主题并展示如何使用MSAL.JS的线程,请参考该线程。
你可以在这里查看JavaScript中的客户端请求模式here。我相信上述提到的过程可能会对你有所帮助。
更多详细信息请阅读: MSAL单页应用程序 ADAL的实现 使用MSAL进行B2C的单页应用程序 谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接