Ниже приведены шаги по вызову размещенного API Azure из SharePoint в Интернете с использованием библиотеки JavaScript и ADAL.js, без запроса подписи, все должно обрабатываться в сценарии с использованием ADAL.js для проверки подлинности безопасного API.
Создание и настройка API
- Создать лазурный API
- Опубликуйте свой лазурный API в лазурном
Перейдите на портал Azure, выберите приложение API, выберите Аутентификация / авторизация.
Установите для службы приложений Аутентификацию: Вкл.
Действия, которые необходимо предпринять, если запрос не прошел аутентификацию: Войдите в словарь Azure.
Провайдеры аутентификации: Экспресс ![введите описание изображения здесь](https: // i. stack.imgur.com/bMeGI.jpg )
Теперь API защищен с помощью Azure AD, если вы перемещаетесь по API через браузер, вам будет предложено войти в систему.
- Когда мы устанавливаем аутентификацию в экспресс-режиме, приложение будет автоматически создано в Azure Active Directory, вы можете увидеть имя в приложении Azure AD.
- Перейдите на портал управления Azure, нажмите активный каталог на левой панели навигации,
![введите здесь описание изображения](https://i.stack.imgur.com/ztWry.jpg)
- Щелкните каталог, который будет интегрирован в ваш офис 365 (или любой источник, который вы хотите вызвать API Azure, который использует тот же активный каталог Azure, что и настроенная для вас проверка подлинности API).
- Щелкните приложение, и вы найдете свое приложение AD в списке, который был создан с помощью метода Express, как мы обсуждали в шаге №3.
- Теперь нам нужно создать новое приложение в AAD, которое будет нашим каналом связи от Office 365 к API Azure. Нажмите «ДОБАВИТЬ» в нижнем колонтитуле.
- Введите имя и выберите опцию «ВЕБ-ПРИЛОЖЕНИЕ И / ИЛИ ВЕБ-AP».
- В поле URL-адрес входа введите URL-адрес SharePoint в Интернете, из которого вы планируете вызывать API Azure.
- Для APP ID UR L введите уникальный URL, он будет использоваться в качестве уникального логического идентификатора для вашего приложения.
- После создания приложения нажмите "Настроить" и скопируйте идентификатор клиента, который будет использоваться позже.
- В разделе Разрешение для других приложений нажмите «Добавить приложение», на следующей странице выберите «Все приложения» и выберите приложение Azure API, которое вы дважды проверили на шаге 8 и подтверждаете
- Вы будете перенаправлены обратно на страницу настройки. Теперь в разделе Разрешение для других приложений вы видите, что ваше приложение Azure API указано здесь, нажмите делегированное разрешение, выберите доступ к приложению.
- Внизу страницы нажмите Управление манифестом> Скачать манифесты t.
- Загрузите файл в место, где вы сможете его отредактировать.
- В загруженном файле манифеста найдите свойство oauth2AllowImplicitFlow. Измените значение этого свойства с false на true, а затем сохраните файл.
- Нажмите Управление манифестом> Загрузить манифест и загрузите файл, который вы обновили на предыдущем шаге.
- Портал управления Azure, выберите параметр и скопируйте идентификатор подписки AAD для соответствующего AAD
![введите описание изображения здесь](https: //i.stack.imgur.com/iOn4g.jpg )
Вызов API Azure из SharePoint Online
После выполнения вышеуказанных шагов вы можете вызвать Azure API из sharePoint в Интернете, который использует тот же Active Directory, указанный выше.
- Отредактируйте страницу и добавьте веб-часть редактора скриптов
- Добавьте следующий сценарий · subscriptionId, см. Шаг 20 · clientId см. Шаг 13
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.13/js/adal.min.js"></script>
<script type="text/javascript">
function CallAzureAPI() {
"use strict";
var subscriptionId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
window.config = {
subscriptionId: subscriptionId,
clientId: clientId,
postLogoutRedirectUri: window.location.origin,
endpoints: {
AzureApiUri: 'https://xxxxxxxxxxxx.azurewebsites.net'
},
cacheLocation: 'localStorage'
};
var authContext = new AuthenticationContext(config);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
if (isCallback && !authContext.getLoginError()) {
window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
// If not logged in force login
var user = authContext.getCachedUser();
if (user) {
// Logged in already
console.log(user);
}
else {
authContext.login();
}
// Acquire token for Files resource.
authContext.acquireToken(config.endpoints. AzureApiUri, function (error, token) {
// Handle ADAL Errors.
if (error || !token) {
console.log('ADAL error occurred: ' + error);
return;
}
var ApiUri = "https://xxxxxxxxx.azurewebsites.net/api/Get";
$.ajax({
type: "GET",
url: ApiUri,
headers: {
'Authorization': 'Bearer ' + token,
}
}).done(function (response) {
console.log('Successfully called API.');
console.log(response);
}).fail(function () {
console.log('Calling API failed.');
});
});
}
</script>
<input type='button' value='Call Azure API' onclick=" CallAzureAPI ();"/>
Это решение работает, хотя через некоторое время (позже я узнал, когда истек срок действия файла cookie AAD), мы получаем эту ошибку «Операция обновления токена не удалась из-за тайм-аута»,
Я провел небольшое исследование и обнаружил, что методы getCachedUser или getUser просматривают хранилище браузера для id_token и возвращают ненулевого пользователя, если в кеше есть токен. Однако время истечения срока действия токена не учитывается. Что происходит здесь, поскольку используется localStorage, токены сохраняются в кеше при повторном открытии браузера (и, следовательно, getCachedUser возвращает ненулевой объект), но срок действия файла cookie AAD истек (если пользователь не установил флажок держать меня в системе, когда Вход в систему). Поскольку срок действия cookie истек, вызов токена получения завершается с ошибкой "требуется вход в систему".
так как обходной путь я проверил, установите флажок держать меня в системе при входе в систему, и он работает.
person
Laleh
schedule
30.12.2016