将 OIDC 联合身份验证 API 操作用于移动应用程序
为获得最佳效果,请在几乎所有 OIDC 联合身份验证场景中将 Amazon Cognito 用作身份凭证代理程序。Amazon Cognito 易于使用,并提供了额外功能,如匿名(未经身份验证的)访问,以及跨设备和提供商同步用户数据。但是,如果您已通过手动调用 AssumeRoleWithWebIdentity
API 创建了使用 OIDC 联合身份验证的应用程序,也可继续使用它,您的应用程序仍能正常工作。
在不 使用 Amazon Cognito 的情况下使用 OIDC 联合身份验证的过程遵循此概要:
-
以开发人员身份注册到外部身份提供程序 (IdP),然后使用向您提供应用程序的唯一 ID 的 IdP 来配置您的应用程序。(不同的 IdP 使用不同的术语表示此过程。此概要使用配置一词表示通过 IdP 标识应用程序的过程。) 每个 IdP 均提供一个对于该 IdP 独一无二的应用程序 ID,因此如果按多个 IdP 的要求配置同一应用程序,则该应用程序将有多个应用程序 ID。可按每个提供商的要求配置多个应用程序。
以下外部链接提供有关使用一些常用身份提供程序 (IdP) 的信息:
-
在 Facebook 开发人员网站上,将 Facebook 登录名添加到您的应用程序或网站
。 -
在 Google 开发人员网站上,使用 OAuth 2.0 进行登录 (OpenID Connect)
。
重要
如果您使用 Google、Facebook 或 Amazon Cognito 提供的 OIDC 身份提供程序,请勿在 Amazon Web Services Management Console 中创建单独的 IAM 身份提供程序,Amazon 内置了这些 OIDC 身份提供程序,可供您使用。跳过以下步骤,直接使用身份提供程序创建新角色。
-
如果您使用与 OIDC 兼容、除 Google、Facebook 或 Amazon Cognito 以外的 IdP,请为其创建 IAM 身份提供程序实体。
-
在 IAM 中,您可以创建一个或多个角色。对于每个角色,定义谁可代入该角色(信任策略)和应用程序的用户将具有什么权限(权限策略)。通常,您为应用程序支持的每个 IdP 创建一个角色。例如,可创建一个在用户通过 Login with Amazon 登录时应用程序代入的角色,为同一应用程序再创建第二个角色,其中用户通过 Facebook 登录,然后为该应用程序创建第三个角色,其中用户通过 Google 登录。对于信任关系,指定 IdP (如 Amazon.com) 作为
Principal
(可信实体),并加入一个与 IdP 分配的应用程序 ID 匹配的Condition
。针对第三方身份提供程序创建角色(联合) 将介绍不同提供商的角色示例。 -
在应用程序中,通过 IdP 验证用户身份。执行此操作的方式的详情因您所使用的 IdP (Login with Amazon、Facebook 或 Google) 和运行应用程序的平台而异。例如,Android 应用程序的身份验证方式与 iOS 应用程序或基于 JavaScript 的 Web 应用程序的不同。
通常,如果用户尚未登录,则 IdP 负责显示登录页面。Idp 在对用户进行身份验证后,会将身份验证令牌与用户相关信息一起返回到您的应用程序。包含的信息取决于 IdP 公开的内容和用户愿意共享的信息。可在应用程序中使用这些信息。
-
在应用程序中,对 操作进行未签名
AssumeRoleWithWebIdentity
调用以请求临时安全凭证。在该请求中,传递 IdP 的身份验证令牌,然后指定为该 IdP 创建的 IAM 角色的 Amazon Resource Name (ARN)。Amazon 将验证令牌是否可信和有效,如果是这样,则会将临时安全凭证返回到具有从您在请求中命名的角色的权限的应用程序。响应中还包括来自 IdP 的用户相关元数据,例如,IdP 将其与用户关联的唯一用户 ID。 -
通过使用来自
AssumeRoleWithWebIdentity
响应的临时安全凭证,应用程序向 Amazon API 操作发出已签名的请求。IdP 中的用户 ID 信息可以区分您的应用程序中的用户。例如,您可以将对象放入 Amazon S3 文件夹中,其包含用户 ID 作为前缀或后缀。这样可创建锁定该文件夹的访问控制策略,以使仅具有该 ID 的用户能够访问该文件夹。有关更多信息,请参阅 Amazon STS 联合身份用户会话主体。 -
您的应用程序应缓存临时安全凭证,这样您就不需要每次在应用程序需要对 Amazon 发出请求时获取新凭证。默认情况下,证书的有效期为 1 小时。当凭证到期时 (或在此之前),再次调用
AssumeRoleWithWebIdentity
以获取新的一组临时安全凭证。根据 IdP 及其管理其令牌的方式,可能必须先刷新 IdP 的令牌,然后再对AssumeRoleWithWebIdentity
进行新的调用,因为 IdP 的令牌通常也在固定的一定时间后到期。如果使用的是 Amazon SDK for iOS 或 Amazon SDK for Android,则可使用 AmazonSTSCredentialsProvider操作,该操作管理 IAM 临时凭证,包括按需刷新凭证。