对于已有支持OAuth 2.0的鉴权服务器的租户,需要在原有基础上针对外部系统进行接入,从而实现单点登录以及打通企业内部员工基础信息的需求。本文为您介绍OAuth 2.0的鉴权服务器的标准协议。
背景信息
OAuth 2.0是一种用于授权的框架,与OAuth 1.0不同,它无需使用加密签名或密钥交换的方式来验证请求。OAuth 2.0使用访问令牌来授权应用程序从而访问用户的资源。它支持多种授权类型,如授权码(Dataphin目前仅支持授权码模式,这是较为常见的模式)、客户端凭证、密码凭证以及隐式授权等。OAuth 2.0相比OAuth 1.0而言,简化了授权流程、提高了安全性和可扩展性,并提供了更好的用户体验。
使用说明
支持用户认证的方式接入Dataphin,通过认证后即加入除元仓租户以外的所有租户。
Dataphin不自动添加该成员到该租户下,需该租户的系统管理员手动添加该用户。
对接方案
接入前准备
您需要先在OAuth服务提供商的网站上注册应用,并获取client ID和client secret信息,此信息将用于应用程序的身份验证和授权。
配置项
是否必选
说明
client ID
是
用于标识身份的客户端ID。
client secret
是
用于身份校验的客户端Secret。
您需编写JSON格式配置文件并进行base64编码。
编写配置文件
编写JSON格式配置文件
注意:将以下的JSON文件模板中的配置项替换为正确的信息。
{
"client":{
"registrationId":"dataphin",
"clientId":"dataphin",
"clientSecret":"XXXXX",
"clientAuthMethod":"basic",
"scopes":[
"read",
"write",
"trust"
],
"tokenUri":"https:\/\/*****.*******.com\/oauthserver\/*****\/token",
"authorizationUri":"https:\/\/*****.*******.com\/oauthserver\/*****\/authorize",
"userInfoUri":"https:\/\/*****.*******.com\/oauthserver\/me",
"redirectUriTemplate":"{baseUrl}\/login\/oauth2\/code\/{registrationId}",
"userNameAttributeName":"username",
"clientName":"dataphin",
"logoutUriTemplate":"https:\/\/*****.*******.com\/oauthserver\/logout?username={0}",
"logoutMethod":"get",
"logoutParamNames":"email",
"logoutAuthorizationTemplate":"Bearer {0}",
"logoutAuthorizationParamNames":"accessToken"
},
"user":{
"idAttributeName":"userid",
"displayNameAttributeName":"username",
"realNameAttributeName":"realname",
"emailAttributeName":"email",
"mobilePhoneAttributeName":"mobilePhone"
}
}
配置名称 | 配置说明 | 配置示例值 |
registrationId | 它是一个字符串,用于区分不同的客户端应用。在 OAuth 2.0 中,registrationId 通常与 clientId 相同,用于标识客户端应用的身份。 | dataphin |
clientId | 客户所注册的clientId。 | dataphin |
clientSecret | 客户所注册的client secret。 | your_client_secret |
clientAuthMethod | 客户所注册的应用验证方式。 | basic |
scopes | 客户Idp的授权信息。 | read,write,trust |
tokenUri | 获取token的地址。 | https://*****.*****.com/oauthserver/*****/token |
authorizationUri | 认证地址。 | https://*****.*****.com/oauthserver/*****/authorize |
userInfoUri | 获取用户信息的地址。 | https://*****.*****.com/oauthserver/me |
jwkSetUri | 获取公钥的地址。
| https://*****.*****.com/49d65996-*****-4f8d-920f-*****/discovery/v2.0/keys |
redirectUriTemplate | dataphin的回调地址,不能修改。 | {baseUrl}/login/oauth2/code/{registrationId} |
userNameAttributeName | Idp返回的用户信息中“用户名”所对应的属性名。 | username |
idAttributeName | idp返回的用户信息中ID字段的字段名,该名称在Dataphin中将用于唯一标识用户。 | userid |
clientName | 该client的名称,建议和registerID保持一致。 | dataphin |
logoutUriTemplate | 退出登录的URL,支持加query参数。 | https://*****.*****.com/*****/logout?username={0} |
logoutMethod | 退出登录的方法,支持get和redirect。 | get |
logoutParamNames | 退出登录时所携带的参数名,用于填充logoutUriTemplate中的占位符。 | |
logoutAuthorizationTemplate | 退出登录时所携带的认证信息。 | Bearer {0} |
logoutAuthorizationParamNames | 与logoutParamNames一样,支持变量替换。 | accessToken |
displayNameAttributeName | idp返回的用户信息中用户显示名称字段的字段名。 | username |
realNameAttributeName | idp返回的用户信息中用户真实姓名字段的字段名。 | realname |
emailAttributeName | idp返回的用户信息中用户邮箱字段的字段名。 | |
mobilePhoneAttributeName | idp返回的用户信息中用户手机号字段的字段名。 | mobilePhone |
对JSON格式的配置信息进行Base64编码
将以上JSON格式的配置信息放至文本文件中,以.json格式保存。
若您使用的是Mac操作系统,则用以下方式进行Base64编码。
打开终端应用程序。
输入以下命令进行Base64编码:
cat OAuth_config.json | base64
。
若您使用的是Windows操作系统,您可以使用PowerShell或命令提示符中的certutil命令进行Base64编码。
PowerShell中执行Base64编码的示例:
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("OAuth_config.json")) > encodedOAuth_config.txt
。在命令提示符中,您可以使用以下命令进行Base64编码:
certutil -encode OAuth_config.json encodedOAuth_config.txt
。
Datpahin配置认证信息
您需提供以下配置信息给Datpahin运维人员。
dataphin.sso.provider.session=com.alibaba.dataphin.sso.provider.thirdpart.oauth.session.DataphinOauth2SessionProvider
dataphin.sso.provider.account=com.alibaba.dataphin.sso.provider.thirdpart.oauth.account.DataphinOauth2AccountProvider
dataphin.security.thirdpartoauth2.encodedProperties = 'Base64编码的OAuth2 json配置项的文件内容'
历史用户切换认证系统
Dataphin userTable中存储了用户的源id(以下称source_user_id)和Dataphin user_id(以下称user_id)。在Dataphin业务执行中,将使用user_id作为用户标识,source_user_id用于用户信息转换。
当用户在idp登录后,携带source_user_id到Dataphin,Dataphin通过userTable将source_user_id转换为user_id,用户转换完成。
因此在历史用户升级时,需要做source_user_id的订正,以方便新系统的用户可以直接映射成Dataphin中相应的成员。
例如:客户从阿里云的登录系统,切换到微软的AD,此时Dataphin的超管为小明,则需要将小明这个用户在阿里云中的ID,替换为其在微软AD中的ID。
在信息映射表中,至少应包含两个列:fromId、toId。fromId表示之前idp中的ID,toId表示新idp中的ID。
未进行订正的用户将无法再访问Dataphin,若其为某些权限的所有人(比如某些权限的审批人),则有可能影响业务。所以在用户订正时,需要客户仔细核实所提供表格,避免订正遗漏或错误
用户名
fromId
toId
小明
aliyun123
ms_ad_124
SuperAdmin
aliyun666
ms_ad_666