对于已有支持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