Интеграция Okta с JavaScript
Мне было поручено интегрировать существующее приложение JavaScript с Okta.
Для этого приложения требуется доступ к определенным ресурсам Amazon AWS API Gateway. Сгенерированный API-шлюзом SDK требуется ключ доступа и секретный ключ доступа, для которого мы бы предпочли использовать временные учетные данные.
Согласно документации AWS, для получения временных учетных данных требуется утверждение для вызова AssumeRoleWithSAML AWS.
Я пробовал следующие ресурсы Okta, но не смог определить, как получить утверждение с помощью JavaScript:
Интеграция AWS SAML с Okta: эта настройка позволяет войти в консоль AWS.
Виджет входа в Okta: используя виджет, я не смог найти утверждение в том, что возвращается.
Okta API / SDK: JavaScript API/SDK не указан.
Я нашел несколько реализаций Python, которые возвращают временные ключи доступа, но не нашел ни примеров, ни документации, описывающей подход JavaScript с Okta.
Спасибо.
1 ответ
Вот пример приложения, показывающего, как интегрировать Okta с Amazon S3 в JavaScript с помощью виджета входа Okta: https://github.com/okta/okta-oidc-aws
Этот пример приложения основан на JavaScript Amazon в образце приложения Browser, но проходит аутентификацию в Okta, используя OpenID Connect вместо Facebook, как это делает пример приложения Amazon.
Обратите внимание, что текущая версия виджета входа в Okta (1.7.0) включает
xhr
библиотека, которая конфликтует с Amazon SDK JavaScript. Это будет исправлено в версии 1.9.0 виджета входа Okta, который удаляетxhr
, Между тем, пример в репозитории okta-oidc-aws поставляется с пользовательской версией виджета, которая имеетxhr
отключен.
Репозиторий GitHub для образца okta-oidc-aws содержит полную информацию о работе примера.
На высоком уровне важными частями являются следующие:
- Получите OpenID Connect
id_token
из Окты. - Используйте класс WebIdentityCredentials для обмена Okta
id_token
для роли AWS IAM. Это известно как " Федерация веб-идентификации ".
Код, который делает это, приведен ниже и скопирован прямо из файла sample.html в примере:
AWS.config.credentials = new AWS.WebIdentityCredentials({
RoleArn: AWS_ROLE_ARN,
WebIdentityToken: res.idToken
});
AWS.config.credentials.get(function(err) {
if (err) {
console.log("Error creating AWS Web Identity: " + err);
return;
}
bucket = new AWS.S3({
params: {
Bucket: AWS_S3_BUCKET_NAME
}
});
oktaLoginContainer.style.display = 'none';
uploadDialog.style.display = 'block';
listObjs();
});