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

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

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

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

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

Я нашел несколько реализаций Python, которые возвращают временные ключи доступа, но не нашел никаких примеров или документации, описывающих подход JavaScript с Okta.

Спасибо.


person three    schedule 09.05.2016    source источник


Ответы (1)


Вот пример приложения, показывающего, как интегрировать Okta с Amazon S3 в JavaScript, используя виджет входа в Okta: https://github.com/okta/okta-oidc-aws

Этот пример приложения основан на JavaScript в браузере от Amazon, но аутентифицируется против Okta с помощью OpenID Connect вместо Facebook, как это делает пример приложения Amazon.

Обратите внимание, что текущая версия виджета входа Okta (1.7.0) включает библиотеку xhr, которая конфликтует с SDK Amazon JavaScript. Это будет исправлено в версии 1.9.0 виджета входа в Okta, которая удаляет xhr. А пока пример в репозитории okta-oidc-aws поставляется с настраиваемой версией виджета, у которой xhr отключено.

Подробная информация о получении примера содержится в репозитории GitHub для образца okta-oidc-aws. работающий.

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

  1. Получите OpenID Connect id_token от Okta.
  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();
});
person Joël Franusic    schedule 30.11.2016