我的任务是将现有的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存储库提供了有关如何使示例工作的全部详细信息。
在高层,重要部分如下:
- 从Okta获取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();
});