很多公司同时使用企业微信进行组织管理和阿里云服务。我们不想为每个员工创建一个单独的阿里云子账户。如果能直接用企业微信登录就好了。这时候,如何统一用户目录,实现单点登录就成了我们需要思考的问题。阿里云在其单点登录管理(SSO)中介绍,可以使用SAML协议来提供单点登录管理。企业自己的身份管理系统就是身份提供者(IdP)。通过用户SSO,企业员工登录后将以RAM用户身份访问阿里云。暂时先不用管SAML是什么。下面将详细讨论。这里,可以简单理解为一种用户身份问答协议。管理员完成用户SSO的相关配置后,企业员工Alice可以通过上图所示的方式登录阿里云。Alice使用浏览器登录阿里云,阿里云向浏览器返回SAML认证请求。浏览器将SAML身份验证请求转发给IdP。IdP提示Alice登录,并在Alice登录成功后生成SAML响应给浏览器。浏览器将SAML响应转发给SSO服务。SSO服务通过SAML互信配置验证SAML响应的数字签名,判断SAML断言的真实性,并通过SAML断言的NameID元素值匹配对应阿里云账号中的RAM用户身份。SSO服务将控制台的URL返回给浏览器。总结要点:IdP(identityprovider),即企业用户,有自己的用户目录。至于这个用户目录的具体类型,你是用数据存储还是Excel存储,是用账号密码登录还是阿里云不放心支持第三方社交登录。重要的是你的用户目录需要和阿里云RAM用户身份建立一对一的关系。对于SAML协议,需要将你的用户目录的唯一用户字段作为NameID传递给阿里云,以便阿里云知道哪个RAM用户应该登录阿里云。所以我们的问题就是分解成以下几个步骤:你的用户目录支持SAML协议,你的用户目录支持企业微信登录,你的用户目录和阿里云用户角色建立一对一的关系。如果你对其中的某个部分很了解,可以跳过相应的章节。支持SAML协议,首先普及一下什么是SAML:SAML的全称是SecurityAssertionMarkupLanguage(中文直译为“安全断言标记语言”),从字面意思。我们从协议交互的角度出发:SAML认证过程一般涉及两方:服务提供者(SP)和身份提供者(IdP)。典型的SP有阿里云、腾讯云,还有许许多多的SaaS服务;IdP其实就是Webusinessourself,因为用户目录在我们这里。当访问SP服务时,SP会向IdP发送一个SAMLRequest(具体我们暂且不关心),请求IdP判断用户身份。IdP收到SAMLRequest后,可以通过某种方式验证用户的身份。如果用户已登录,则可以直接将用户的身份信息返回给SP;如果没有登录,会弹出登录框,将用户身份返回给sp。SP收到用户信息后,在自己的数据库中找到对应的用户,然后以这个用户的身份访问SP的服务。SAML协议的具体实现过于复杂。不建议从头开始实施。可以使用现有的开源库,比如:NodeJS的samlifyPython的python-samlJava的java-saml一般来说,如果你是IdP,你需要整合你的内部用户目录数据库的字段与SAML字段对齐,并且元数据,实现SingleSignOnService和SingleLogoutService接口,分别获取IdP元信息,单点登录和单点退出。具体的代码实现这里就不详细说了。如果你有兴趣,可以使用开源库来实现,也可以考虑使用我们现成的SAML服务。支持企业微信登录企业微信支持两种身份认证方式:网页授权登录(指在企业微信APP中打开的网页,不适用于普通浏览器网页)和扫码登录,这里主要说一下如何接入扫一扫扫码登录。BTW:如果你对扫码登录的原理感兴趣,可以看我们之前的系列文章如何从零实现扫码登录。企业微信扫码登录流程如下:用户进入第三方网站,该网站支持使用企业微信登录。用户使用企业微信扫码登录后,企业微信会将登录授权码返回给你,你就可以用这个授权码换取用户信息了。首先需要拼接一个微信扫码登录链接,如下图:https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?appid=ww100000a5f2191&redirect_uri=http%3A%2F%2Fwww.oa。com&state=web_login@gyoss9&usertype=memberappid为服务商CorpIDredirect_uri授权用户后,企业微信服务器转发授权码的地址。usertype是支持登录的类型。admin表示管理员登录(使用微信扫码),member表示会员登录(使用企业微信扫码),默认为admin。用户同意授权后,登录授权码会转发到上面填写的redirect_uri,你可以用它来换取用户信息:POSThttps://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=PROVIDER_ACCESS_TOKENPOSTrequestBodyis:{"auth_code":"xxxxx"}其中auth_code是登录授权码,PROVIDER_ACCESS_TOKEN是服务商证书,你可以在这里查看如何获取服务商证书。检索用户信息后,您可以将其持久化到您自己的数据库中。具体细节我就不赘述了。还涉及配置IP白名单,添加可信域名等,有兴趣的可以阅读企业微信的开发文档。当然,如果您不想自己实施,我们也提供这项服务。用户目录和阿里云用户角色对齐。如果你实现了SAML协议,你有一个接口可以用来下载IdPMetadata,需要上传到阿里云。在阿里云中添加用户,使用您的阿里云账号登录阿里云控制台。将鼠标悬停在您的用户头像上,出现下拉菜单,点击“访问控制”。进入左侧菜单->人事管理->用户,点击“新建用户”。输入用户名和显示名,检查控制台密码登录并单击“确认”。本教程输入的登录名是authing,显示名也是authing。点击左侧菜单->人事管理->用户,在右侧页面列表中可以看到新添加的用户,记录用户登录名(xxx@xxx.onaliyun.com),后面会用到。单击相应用户条目右侧的“添加权限”。在权限列表中,选择需要授予账号的权限。在本教程中,选择“AdministratorAccess”作为最高权限。单击确定。进入左侧菜单->SSO管理,点击右侧页面的“用户SSO”选项卡,在下方的SSO登录设置中点击“编辑”。SSO功能状态选择“开启”。单击“上传文件”以上传您的SAMLIdP元数据。点击“确认”。在您的用户目录中对齐在上一步中,您已经在阿里云中配置了一个帐户。用户名为xxx@xxx.onaliyun.com。接下来,您需要将其映射到您的用户目录。方法很简单,只需要将对应企业微信登录用户的NameID设置为xxx@xxx.onaliyun.com即可。作为本文的总结,我们介绍了如何使用SAML协议在企业微信和阿里云之间建立连接。总结一下,我们一共实现了三件事:接入SAML协议,接入企业微信登录,用自己的用户目录打通阿里云RAM用户。其实企业微信登录只是一种登录方式,你还可以支持GitHub登录、微博登录、手机号验证码登录、生物指纹登录……你能想到的任何登录方式都可以。Authing支持上述所有内容。我们有非常丰富的社交登录方式。除了微信,我们还支持GitHub、微信、微博、钉钉、QQ、支付宝、小程序等,我们还封装了简单易用的SAML协议,让您拥有完整的SAML协议实现和只需填写您简单的配置文件即可创建一个美观且易于使用的登录表单:如果您不想关心具体的技术细节,则完全可以您可以直接使用Authing的开箱即用服务来专注更多关于您的核心业务。欢迎体验:https://authing.cn,让身份管理像水电一样触手可及。