我目前正在开发一个javascript应用,并且我正在尝试访问Dynamics CRM Web API以从CRM中获取一些信息。
我的应用程序托管在Azure应用服务中(并在localhost中进行测试),并且只能通过身份验证的用户访问(通过微软),因此当用户尝试加载应用时,azurewebsites会将它们重定向到微软&# 39;常见的OAUTH登录页面(https://login.microsoftonline.com/common/oauth2/authorize?...
)。
成功登录后,用户重定向回我的javascript应用程序,然后当文档准备就绪时,我想调用动态CRM web api来获取一些实体(通过jQuery' ajax请求),但是我在JS控制台中收到以下错误消息:
XMLHttpRequest cannot load https://MYTENANTID.crm4.dynamics.com/api/data/v8.1/contacts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://MYAPP.local' is therefore not allowed access. The response had HTTP status code 401.
我知道这是因为相同的原始政策,问题是:是否可以从客户端访问API,或者我需要在服务器端进行?
答案 0 :(得分:0)
根据您的错误消息,当我们从客户端应用程序调用请求到我们的后端服务器时,它似乎是一个常见的CORS问题。
通常,我们将在后端服务器中添加响应头以支持CORS。您可以参考https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api以获取有关如何在ASP.NET Web API中启用跨源请求的更多信息。
CRM 2016支持CORS设置,有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/gg309589%28v=crm.8%29.aspx?f=255&MSPPError=-2147217396#bkmk_corsSupport。