Okta与JavaScript的集成

Okta integration with JavaScript

本文关键字:集成 JavaScript Okta      更新时间:2023-09-26

我的任务是将现有的JavaScript应用程序与Okta集成。

此应用程序需要访问亚马逊AWS API网关上的某些资源。API-Gateway-generated SDK需要一个访问密钥和一个我们更愿意使用临时凭据的秘密访问密钥。

根据AWS文档,调用AWS的AssumeRoleWithSAML以检索临时凭据需要断言。

我尝试了以下Okta资源,但无法确定如何使用JavaScript:获得断言

  • AWS SAML与Okta的集成:此设置允许登录到AWS控制台。

  • Okta登录小部件:使用小部件,我无法在返回的内容中找到断言。

  • Okta API/SDK:未列出JavaScript API/SDK。

我发现了一些返回临时访问密钥的Python实现,但没有发现任何描述Okta的JavaScript方法的示例或文档。

谢谢。

以下是一个示例应用程序,展示了如何使用Okta登录小工具在JavaScript中将Okta与AmazonS3集成:https://github.com/okta/okta-oidc-aws

此示例应用程序基于浏览器示例应用程序中的亚马逊JavaScript,但使用OpenID Connect而不是像亚马逊示例应用程序那样使用Facebook对Okta进行身份验证。

请注意,当前版本的Okta登录小工具(1.7.0)包含与亚马逊JavaScript SDK冲突的xhr库。这将在1.9.0版本的Okta登录小工具中得到修复,该小工具删除了xhr。同时,okta-oidc-aws repo中的示例附带了禁用xhr的小部件的自定义版本。

okta-oidc-aws示例的GitHub存储库提供了有关如何使示例工作的全部详细信息。

在高层,重要部分如下:

  1. 从Okta获取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();
});