javascript - 如何使用 SAML 将 AWS Cognito 连接到远程 Shibboleth 安装?

标签 javascript amazon-web-services saml amazon-cognito shibboleth

免责声明:我不太熟悉 Shibboleth 或其他身份验证系统或 AWS Cognito 的工作原理,因此对于任何可以提供帮助的人,请用简单的术语解释一下。

我的公司最近在 AWS 上运行了我们产品的云版本,我们现在希望使用 AWS Cognito 和 SAML 连接到远程 Shibboleth 系统,以对登录我们云系统的用户进行身份验证。 Shibboleth 系统位于客户机构的远程位置。

到目前为止,我已经完成了以下操作(我不知道其中是否正确):

  1. 在 AWS 中,我创建了 SAML 类型的 IAM 身份提供商。我从客户的 IT 部门收到了一个 SAML.xml 文件,并将其连接到 IAM 身份提供商。这看起来没问题。
  2. 当我设置 IAM 身份提供商时,AWS 自动创建了 Cognito Auth 和 Unauth Angular 色,我为其保留了默认策略。
  3. 我为客户机构设置了新的联合身份。我还将创建的 IAM 身份提供商链接到此联合身份。
  4. 创建联合身份后,我被带到 AWS 中的示例代码页面,我需要在其中选择用于建立连接等的 SDK。我还获得了一个身份池 ID来自AWS。我选择使用 JavaScript SDK,因此我下载了 JS SDK 以及 GitHub 上另一个推荐的库,名为 amazon-cognito-js-master
  5. 我在一个新的 HTML 文件中包含了必要的 JS 脚本,然后将下面的 JS 代码放入该文件中(带有有效的身份池 ID)。
  6. 当我运行脚本时,我似乎从 console.log 语句中返回了一个有效的 syncClient 对象,但从那里,我不知道该怎么做.

基本上,此时我需要做什么才能从 JS 脚本向远程 Shibboleth 系统发出请求以验证用户身份?

在发出 AWS.CognitoSyncManager 请求之前,我是否需要拥有可用的用户凭证(即用户名和密码),或者在此之前是否需要某种程度的初始化?我是否需要客户机构/IT 部门提供其他信息/文件来进行此设置?

我对此知之甚少,我什至不知道该问哪些问题。任何帮助/指导将不胜感激。

请注意,我已经广泛查看了 AWS 文档,但我无法理解他们所说的内容(我不是身份验证专家)。谢谢。

var IdentityPoolId = 'us-east-2:45679821-9064-45f8-12ac-456132abc789'; // Not a real ID.

// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'us-east-2'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId: IdentityPoolId,
});

// Initialize the Cognito Sync client

AWS.config.credentials.get(function(){

  var syncClient = new AWS.CognitoSyncManager();

  console.log(syncClient);

  syncClient.openOrCreateDataset('myDataset', function(err, dataset) {

    dataset.put('myKey', 'myValue', function(err, record){

      dataset.synchronize({

        onSuccess: function(data, newRecords) {
          // Your handler code here
        }

      });

    });

  });

});

最佳答案

  • 基本上,此时我需要做什么才能从 JS 脚本向远程 Shibboleth 系统发出请求以验证用户身份?
    好吧,你不能。使用联合身份时,您需要编写自己的代码来显示登录 UI 或重定向到 Shibboleth 等第三方 IdP 的登录页面或使用他们的 SDK。最终,您需要编写自己的代码,无需任何 AWS SDK 来获取 OpenID token 或如您的情况,需要 SAML 断言。当您确实获得 token 或 SAML 断言时,请在初始化 CognitoIdentityCredentials 时在登录映射中使用它。请参阅示例 here 。有一个登录字段,您需要传递从 IdP 收到的 token 或断言。现在,只要映射中的 SAML 断言有效,您就可以获得临时 AWS 凭证,并且您的 AWS 调用将会成功。登录映射中的这一行是 Cognito 与您的 Idp 之间的唯一交互,例如使用联合身份时的 Shibboleth。您无法使用用户名和密码直接从 Cognito Federated Identities 调用 Shibboleth 来获取有效的 token 或响应。

  • 但是如果我想构建一个需要使用 Shibboleth 进行身份验证的应用程序或服务该怎么办?理想情况下,如果用户未登录,我应该看到一个 UI,它将我重定向到 Shibboleth,在那里我可以输入我的用户名和密码。之后,我应该使用有效的凭据重定向到我的应用程序/服务。
    这也可以完成,但使用 Cognito 用户池而不是联合身份。将您的 SAML 提供程序添加到用户池(请参阅 this )。之后,将用户池添加到您的身份池(联合身份)。现在使用 Userpool 的内置 UI 登录并获取 Id token (而不是 SAML 断言,User --> Userpool 内置 UI--> Shibboleth --> 用户名+密码登录 --> Shibboleth 发送 SAML 断言到 Cognito 用户池--> 用户池发出 token )。在您的 CognitoIdentityCredentials 的登录映射中使用此 Id token 。

关于javascript - 如何使用 SAML 将 AWS Cognito 连接到远程 Shibboleth 安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47720906/

相关文章:

javascript - 部分 View 中 div 上的 jQuery.each 总是返回 1

ruby-on-rails - 尝试通过 SMTP 和 Rails 3.1.3 使用 Amazon SES 时出现 EOFError 错误

android - 在 android 上使用 opensaml

amazon-web-services - 通过 AWS Lambda 中的 Azure AD 对用户进行身份验证

java - DynamoDB 查询使用非分区键获取项目

saml - 如何从 SAML 消息字符串构造 SAMLObject?

web-services - 使用 SAML 的 SSO 桌面客户端应用程序

javascript - Youtube 识别其已安装的应用程序 : how?

javascript - 如何在 react 中动态获取宽度?

javascript - 在 Javascript 字符串中显示 HTML 代码