火山引擎支持使用标准的OAuth2.0协议的完成授权来实现单点登录。OAuth2.0仅支持用户SSO的方式。
概念 | 说明 |
---|---|
授权端点 | 由身份提供方(IDP)提供,用于获取授权的终端Https URL,用户访问时将通过此端点完成身份认证 |
访问令牌(Access Token) | 由身份提供方(IDP)颁发的访问令牌,通过此令牌和授权范围可访问用户的信息来实现SSO。OAuth2.0协议中支持使用授权码许可类型(Authorization Code)隐式许可类型(Implicit)等方式获取。火山引擎SSO仅支持使用授权码的方式换取 |
应用客户端ID | 在支持OAuth2.0的身份供应方系统中,需要注册应用并生成一个应用客户端ID(Client ID),访问授权端点时需要使用应用ID和密钥进行匹配校验。 |
回调地址 | 由服务提供方(SP)生产,配置到身份供应方系统中。在OAuth2.0流程中用户完成授权之后,需要通过回调地址推送授权码。 |
授权范围(scope) | 授权范围(scope)是 OAuth 2.0 中的一种机制,用于限制应用使用访问令牌对用户信息的访问范围。在授权时, 用户可以对请求的scope进行接受,访问另外将只能访问用户接受的数据范围。 |
用户信息端点 | 由于OAuth2.0本身是授权协议,并不具备认证的能力。为了完成SSO,需访通过身份供应商系统提供用户信息端点获取到用户的信息,用于和火山引擎IAM用户进行匹配。 |
配置基于OAuth2.0的SSO流程如下:
根据企业内身份供应方系统的要求,为访问火山引擎注册应用。获取应用的客户端ID和各端点信息。
进入“访问控制”的身份供应商页面,点击“新建身份供应商”按键,在弹窗中选择OAuth2.0作为身份供应商类型。
在弹窗中填写从企业内身份供应方系统获取的应用ID、应用密钥、授权端点、Token端点,Scope,用户信息端点和授权链接模板。其中授权链接模板的参数格式可能会根据不同的身份供应商系统间不同,火山引擎作为服务提供方需要使用链接模板的格式去请求IDP发code。这一个授权链接的例子:https://idp.domain.com/authorize?client_id=xxxxx&response_type=code&redirect_uri=https%3A%2F%2Fconsole-signin.volcengine.com%2Foauth%2Fsso%2F72050488121243243&scope=profile&state=12345
在模板中,${authEndpoint},${clientId},${scope}参数将会被填写的授权端点、应用ID和Scope授权范围所替换
注:为保证安全性,火山引擎仅支持code的授权码模式,不支持直接传递token的授权码模式。
设置用户映射规则,可以选择IAM子用户的名称或者安全手机进行设置,同时填写通过用户信息端点获取的对应属性。支持用户的信息字段是复杂的JSON结构,比如userinfo.userid代表userinfo下的userid属性。
点击提交完成创建
提交身份供应商之后,点击身份供应商名称,可在详情页查询到回调地址,将其回填到企业身份提供方系统对应的应用中。
点击开启用户SSO,可选择是否同时禁用掉其他的登录方式。此时可通过火山引擎的“企业联邦登录”入口,或在企业内部的门户,添加火山引擎的应用访问入口进行SSO登录。
以飞书集成平台为例,访问火山引擎应用的入口其实就是授权链接:https://anycross.feishu.cn/sso/xxxxxx/oauth2/auth?client_id=xxxxx&scope=username&response_type=code&state=12345&edirect_uri=https://signin.volcengine.com/oauth/sso/xxxxx
通过此链接,将通过企业内的身份系统完成登录。如验证通过之后会将授权码(code)通过回调地址返回给火山引擎。
如果配置的用户信息端点可用,经过用户信息与配置的映射规则映射到某一个IAM用户,即可实现SSO登录。为此,需要提前在火山引擎创建需要登录的IAM用户并设置好权限。
创建IAM用户可通过访问控制中的用户管理,调用Open API,或启用企业身份中心的用户同步功能实现。