在多个系统之间进行账号互联,有账号链接和用户联邦两种方式,这里列举一下我观察到的一些区别。

协议不同

账号链接一般使用 OAuth 2.0/OIDC 或者 SAML 协议。尽管可能存在其他协议,或者定制化的方式,但是很少见。
而用户联邦一般使用LDAP或者Kerberos协议,或者定制化的方式,定制化的方式也很常见。

用户感知不同

使用账号链接的方式,允许使用系统 B 的账号登录系统A,那么用户认证一定发生在系统B。也就是说,用户在登录系统A时,会被显式跳转到系统B的页面,在B的页面上完成认证后,再跳转回系统A。
如果是第一次登录,那么系统A以系统B的用户信息,在系统A中,创建一个账号,并且将系统B的用户标识做为了一个用户属性储存起来。
而如果使用用户联邦的方式,通过系统B的账号来登录系统A的话,则可以直接在系统A的页面完成认证。尽管系统A的后端仍然会和系统B交互,但是前端交互却可以没有。
哪怕是第一次登录,用户也可以直接在系统A的页面内直接输入系统 B 中的账号密码,完成登录。系统A可以在后端调用系统B的接口,验证通过后,在系统 A 内创建账号。也可以提前批量调用B的接口,将用户全部导入。
总之,用户联邦的集成方式,可以不询问用户的授权,可以没有页面跳转。

交互深度不同

账号链接,系统 A 调用系统 B 的用户信息接口,基本上就完成了,不会再有进一步的交互。而用户联邦,则不限于此,A可以调用系统B中的更多相关接口,比如查询用户的组织信息等等。
并且,账号链接方式,完全不可能在系统A内修改系统B的用户信息。比如你可以使用微信登录一个网站,但要修改微信账号信息,一定需要用户自己在微信侧完成。
但是,用户联邦则可以直接在系统A里修改系统 B 的用户信息。甚至常见的是,用户在系统 A 中修改了信息,需要实时或者定时同步回系统B。

举例

拿Keycloak做为例子,它的身份提供者(Identity Provider)程序使用的是账号链接,允许第三方系统的账号登录Keycloak。常见的社交账号登录,都是账号链接。
image.png
而用户联邦(User Federation)提供者程序使用的是用户联邦。一般来说,和一些企业系统,使用用户联邦进行账号互联。
image.png

总结

账号链接是系统之间通过标准协议和open api的方式,进行账号互联。而用户联邦,则更像是一个系统将另一个系统的用户数据存储当成数据库一样的方式进行操作。
账号链接,多用于终端消费者场景。而用户联邦,多用于企业对内的系统。