Интеграция Okta с JavaScript

Мне было поручено интегрировать существующее приложение JavaScript с Okta.

Для этого приложения требуется доступ к определенным ресурсам Amazon AWS API Gateway. Сгенерированный API-шлюзом SDK требуется ключ доступа и секретный ключ доступа, для которого мы бы предпочли использовать временные учетные данные.

Согласно документации AWS, для получения временных учетных данных требуется утверждение для вызова AssumeRoleWithSAML AWS.

Я пробовал следующие ресурсы Okta, но не смог определить, как получить утверждение с помощью JavaScript:

Я нашел несколько реализаций 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 содержит полную информацию о работе примера.

На высоком уровне важными частями являются следующие:

  1. Получите OpenID Connect id_tokenиз Окты.
  2. Используйте класс 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();
});
Другие вопросы по тегам