我目前有一个Wep应用程序(ASP.NET Core 2.2),Azure函数返回JSON“ hi”。没有使用NodeJS。
我已经使用B2C设置了我的Web应用程序和功能,并且分别访问它们时,它们都提示登录并可以正常工作。
更新:如果我访问Web应用程序,先登录然后访问功能url,它会给出响应“ hi”,但除非我手动访问功能url地址,否则Ajax请求将无法正常工作通过Web App登录后手动进行操作。
我的问题是,我从Web应用程序向该功能提出了Ajax请求,但该请求未传递凭据,并且仅当我分别登录Web应用程序和功能时才有效。
我希望获得帮助,以使Web应用程序将其凭据传递给该函数,因此不会出现以下错误:
在以下位置访问XMLHttpRequest 'https://xxx.b2clogin.com/xxx.onmicrosoft.com/oauth2/v2.0/authorize?response_type=id_token&redirect_uri=https%3A%2F%2Fxxx.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id=5e55f7e5-2b51-4a5f-86c0-b7776b2623b2&scope=openid+profile+email&response_mode=form_post&p=b2c_1_signin&nonce=d138edf541d1423e92b99fe7ca400263_20190331110324&state=redir%3D%252Fapi%252FTest%253F_%253D1554029904731' (重定向自 'https://xxx.azurewebsites.net/api/Test?_=1554029904731')起源 “空”已被CORS政策阻止:否 请求中存在“ Access-Control-Allow-Origin”标头 资源。
function Test2() {
console.log("2. Sending request...");
$.ajax({
type: "GET",
cache: false,
credentials: 'include',
mode: 'cors',
url: 'https://xxx.azurewebsites.net/api/Test',
// contentType: "application/json; charset=utf-8",
//dataType: "application/json",
//data: dataValue,
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function (response) {
console.log('2. Done');
console.log('2. ' + response);
},
failure: function (response) {
console.log("2. Request: Failed.");
alert(response.d);
}
});
}
答案 0 :(得分:1)
就像提到的CSharpRocks一样,浏览器通过根据域传递正确的cookie来进行身份验证。
但是我想在您的情况下,该功能和webapp具有不同的域名,对吗?这就是为什么您需要先登录到功能应用程序,然后它才能工作。
有多种方法可以解决此问题