OIDC角色SSO概览

OIDC(OpenID Connect)是建立在OAuth 2.0基础上的一个认证协议,阿里云RAM支持基于OIDC的角色SSO。

基本概念

概念

说明

OIDC

OIDC(OpenID Connect)是建立在OAuth 2.0基础上的一个认证协议。OAuth是授权协议,而OIDC在OAuth协议上构建了一层身份层,除了OAuth提供的授权能力,它还允许客户端能够验证终端用户的身份,以及通过OIDC协议的API(HTTP RESTful形式)获取用户的基本信息。

OIDC令牌

OIDC可以给应用签发代表登录用户的身份令牌,即OIDC令牌(OIDC Token)。OIDC令牌用于获取登录用户的基本信息。

临时身份凭证

STS(Security Token Service)是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证(STS Token)。

颁发者URL

颁发者URL由外部IdP提供,对应OIDC Token中的iss字段值。颁发者URL必须以https开头,符合标准URL格式,但不允许带有query参数(以?标识)、fragment片段(以#标识)和登录信息(以@标识)。

验证指纹

为了防止颁发者URL被恶意劫持或篡改,您需要配置外部IdP的HTTPS CA证书生成的验证指纹。阿里云会辅助您自动计算该验证指纹,但是建议您在本地自己计算一次(例如:使用OpenSSL计算指纹),与阿里云计算的指纹进行对比。如果对比发现不同,则说明该颁发者URL可能已经受到攻击,请您务必再次确认,并填写正确的指纹。

说明

当您的IdP计划进行证书轮转时,请在轮转前生成新证书的指纹并添加到阿里云OIDC身份提供商信息中,一段时间(至少一天)以后再进行证书轮转,证书轮转确认可以换取到STS Token后再删除旧的指纹。

客户端ID

您的应用在外部IdP注册的时候,会生成一个客户端ID(Client ID)。当您从外部IdP申请签发OIDC令牌时必须使用该客户端ID,签发出来的OIDC令牌也会通过aud字段携带该客户端ID。在创建OIDC身份提供商时配置该客户端ID,然后在使用OIDC令牌换取STS Token时,阿里云会校验OIDC令牌中aud字段所携带的客户端ID与OIDC身份提供商中配置的客户端ID是否一致。只有一致时,才允许扮演角色。

应用场景

当企业应用需要频繁访问阿里云时,如果使用固定的访问密钥(AccessKey),且安全防护措施不足时,可能会因AccessKey泄露而带来安全隐患。为了解决这个问题,有些企业会将应用注册在企业自建或者第三方的具有OIDC能力的身份提供商中(例如:阿里云OAuth、Google G Suite或Okta等),以借助OIDC身份提供商的能力来为应用生成OIDC令牌(OIDC Token)。在这种情况下,借助阿里云RAM提供的角色SSO能力,企业应用可以通过持有的OIDC令牌换取阿里云临时身份凭证(STS Token),从而安全地访问阿里云资源。

此外,有些个人开发者或中小企业允许员工使用其在一些网站(例如:社交网站)上注册的身份来登录阿里云,如果这些网站支持生成OIDC令牌,则可以使用阿里云RAM来完成基于OIDC的单点登录。

基本流程

OIDC角色SSO流程图

  1. 在外部IdP中注册应用,获取应用的客户端ID(Client ID)。

  2. 在阿里云RAM中创建OIDC身份提供商,配置阿里云与外部IdP的信任关系。

    具体操作,请参见创建OIDC身份提供商

  3. 在阿里云RAM中创建可信实体为OIDC身份提供商的RAM角色,并为RAM角色授权。

    具体操作,请参见创建OIDC身份提供商的RAM角色为RAM角色授权

  4. 在外部IdP中签发OIDC令牌(OIDC Token)。

    具体操作,请参见外部IdP的对应文档。

  5. 使用OIDC Token换取STS Token。

    具体操作,请参见AssumeRoleWithOIDC

  6. 使用STS Token访问阿里云资源。

配置示例

使用OIDC进行角色SSO的示例

使用限制

限制项

最大值

一个阿里云账号中可创建的OIDC身份提供商个数

100

一个OIDC身份提供商中的客户端ID个数

20

一个OIDC身份提供商中的验证指纹个数

5