我在Azure中设置了两个Web应用程序,并且都支持Azure AD身份验证。 一个是前端,第二个是API后端。打开每个页面都可以很好地工作(登录屏幕),但是前端对后端的调用会导致被CORS策略阻止。消息是:
XMLHttpRequest无法加载hxxps://backend.azurewebsites.com/api。从hxxps://backend.azurewebsites.com/api重定向到hxxps://login.windows.net/94 ...已被CORS策略阻止:没有'Access-Control-Allow-Origin'标题出现在请求的资源。因此,不允许来源'hxxps://frontend.azurewebsites.net'访问。
调用如下:
$.ajax({
type: type,
dataType: 'json',
url: server + '/' + url,
crossDomain: true,
xhrFields: {
withCredentials: true
},
data: data
}
});
答案 0 :(得分:0)
当呼叫未经身份验证时,API不应发送回重定向。调用者无法做任何有用的事情。
您应该在API上设置Azure AD Bearer令牌身份验证,并将Audience
设置为API客户端ID,并将Tenant
设置为Azure AD租户ID /域名。
然后你的前端应该以某种方式获得API的访问令牌,并将其附加到所有调用它的调用。有多种方法可以做到这一点。
您可以在此处找到单页应用示例:https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp。
此处有更多示例应用:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-code-samples