如果想让某应用a在登录时同时也登录其它挂接到对应ucenter的应用b(入uhome).
那么应该采用synlogin方式.
synlogin方式会让ucenter生成若干条js嵌入脚本.(每个第三方应用对应一条),如下:
<script src="http://host:port/uchome/api/uc.php?code=xxx" />
以uchome为例, uchome/api/uc.php的执行关键过程如下:
1. 从code解编出字段: username, password, uid.
2. 在uchome自身数据库中判断此uid是否存在,如果存在便设置授权cookie.(认为登录成功).
这里头引出了几个问题:
1. 如果用户初次从a站点登录并sync到uchome, 那么uchome自身数据库中是不存在对应账户的,那通过第三方应用登录到uchome的过程会失败.
除非你显示从uchome登录一次, uchome的登录过程如下:
1). 从ucenter登录,获取用户信息.
2). 判断本地数据库是否存在此用户,如不存在则插入用户信息.
关键在第二步, 所以你必须通过uchome的入口才能让新用户插入uchome自身的数据库.
2. 有安全漏洞.
由于uchome/api/uc.php中的判断只是简单判断uid是否存在, 如果uid存在便认为可以正常登录.
那么假如我们的账号某次被盗了,只要攻击者记录下那串<script src = "http://host:port/uchome/api/uc.php?code=xxx"/>
那么后续该用户无论怎么修改密码都无用, 因为uchome的跨应用登录入口api/uc.php根本不检查password,也不与ucenter作通信.
或者如果你知道了某个uchome应用的UC_KEY, 那么你就可以构造伪造请求来模拟任意用户登录了.