Вызов JavaScript функции Azure с аутентификацией AD из SharePoint Online - PullRequest
0 голосов
/ 15 ноября 2018

У меня одна большая проблема с вызовом лазурной функции.Моя функция лазури отлично работает, когда аутентификация выключена.В SharePoint онлайн у меня есть этот код JS:

var serviceURL = "https://xxxxxxxxx.azurewebsites.net/api/Function1?name=test";

$.ajax({
    url: serviceURL,
    type: "POST",
    dataType: 'JSON',
    crossDomain: true,
    success: function (data) {
        alert("Success: " + data);
    },
    error: function (ex) {
        alert("Failure getting user token");
    }
});

Хорошо, так что это работаетНо когда я настраиваю Аутентификацию Active Directory в функции mu Azure и изменяю свой код следующим образом:

    var serviceURL = "https://xxxxxxxxx.azurewebsites.net/api/Function1?name=test";

$.ajax({
    url: serviceURL,
    type: "POST",
    dataType: 'JSON',
    crossDomain: true,
    headers: {
        "Content-Type": "'application/json;odata=verbose'",
        "Accept": "application/json;odata=verbose",
        "crossDomain": "true",
        "credentials": "include",
        "Access-Control-Allow-credentials": "true"
    },
    xhrFields: {
        withCredentials: true
    },
    success: function (data) {
        alert("Success: " + data);
    },
    error: function (ex) {
        alert("Failure getting user token");
    }
});

Я получаю эту ошибку

SEC7122: [CORS] Источник 'https://xxxxxxxx.sharepoint.com' сделал запрос с использованием режима учетных данных «include» и не нашел заголовок ответа Access-Control-Allow-credentials со значением «true» для ресурса с несколькими источниками в «https://xxxxxxxx.azurewebsites.net/api/Function1?name=test'.

Моя функция лазури выглядит следующим образом

[FunctionName("Function1")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");

        // parse query parameter
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        if (name == null)
        {
            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();
            name = data?.name;
        }

        return name == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
            : req.CreateResponse(HttpStatusCode.OK, "Hello " + ClaimsPrincipal.Current.Identity.Name);
    }

Я разрешил в настройках CORS мой домен sharepoint, так что все в порядке ... Я все проверил, но ничего не помогло с этой проблемой ... То жепроблема ... В моей функции Azure я протестировал настройку экспресс-или расширенного режима управления для аутентификации AD, но ничего не помогло .... Спасибо за вашу помощь.

...