本文内容来自web.archive.org/web/20120818182605/http://dev.youku.com/node/17

单点登录技术(SSO)

一、概述


实现站外合作网站的用户和youku站内用户的对应关系,用户在合作网站中无需任何操作就可以登陆youku.

这种对应关系有两种:

1、站外用户直接登陆,如果无此用户的对应关系将自动注册新用户建立对应关系;

2、用户选择绑定到youku的用户,需要提供在youku的注册用户名和密码。

二、实现方式


YOUKU SSO操作是基于合作商token实现认证功能,token为临时身份凭证,其生成方式由合作商的私钥和当前时间组合加密,具体见第三部分参数说明部分.

三、站外自动注册登陆

1、请求方式

以GET的方式请求:

http://api.youku.com/api_ptuser/action_login2

2、参数:

参数 定义 备注
pid YOUKU合作ID Not Null
ctime 当前时间,unix时间戳
从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
Not Null
puid 合作商用户唯一标识
汉字必须以UTF-8形式进行URL编码
Not Null
pwd 合作商用户密码
1、32位小写md5值
2、不提供将自动生成六位随机密码
Null
email 用户注册email
1、如果email重复,系统将自动在其后加入随机字符
2、不提供系统将自动生成以 合作商后缀.youku.com 结尾的email
null
token 认证 32位小写MD5值 md5(youku_$ctime_$privatekey_$puid)
$ctime: 当前unix时间戳
$privatekey: 优酷分配合作商的私钥
$puid: 合作商用户唯一标识
Not Null
type 结果类型
1.直接打印结果 2.重定向URL
1
reurl 转向URL(必须进行URL编码,type=2有效) Null

3、返回结果:

① 直接打印(type=1)

结果为JSON数据:
$result = json_encode(
array(
  0=>标志位(0.失败 1.成功),
  1=>信息(注册登陆的成功或者失败的提示信息),
  2=>用户信息:
  array(
   0=>在youku的用户名,
   1=>在youku的email(仅当用户第一次访问,自动注册的时候返回),
   2=>在youku的密码原文(仅当用户第一次调用接口,没有提供有效md5值密码的时候才出现)
  )
)
) 

② 转向URL以参数形式传递(type=2 推荐)

$reurl?result=base64_encode($result)

③ 常见的返回结果

成功用户不存在:
[1,"YouKu:Reg successful!Login successful(b)!",["panzhiqitest2@youkucom","panzhiqi@gmail.com.kg2","","3597468"]]
没有提供密码:
[1,"YouKu:Reg successful!Login successful(b)!",["panzhiqi22@youkucom","a5rjq4@youkucom.youku.com","7voi7s","3597469"]]
成功用户已经注册了:
[1,"YouKu:Login successful(b)!",["panzhiqitest2@youkucom"]]
失败:
[0,"YouKu:Fail(0)",[]]
0.参数不合法 1.注册成功,但是插入对照失败 2.注册失败 3.反向验证登陆失败 4.youku验证登陆失败 5.没有配置sso用户名后缀,请联系优酷解决 

4、实例:

PHP实例 .NET实例

四、站外用户与优酷用户绑定


1、请求方式

以GET的方式请求:

http://api.youku.com/api_ptuser/action_bind2

2、参数:

参数 定义 备注
pid YOUKU合作ID Not Null
ctime 当前时间,unix时间戳
从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数
Not Null
puid 需要绑定的合作商用户唯一标识
汉字必须以UTF-8形式进行URL编码
Not Null
uid 绑定的优酷站内用户名 Null
pwd 绑定的优酷站内用户密码(32位md5) Null
email 需要绑定的合作商用户email null
token 认证 32位小写MD5值 md5(youku_$ctime_$privatekey_$puid)
$ctime: 当前unix时间戳
$privatekey: 优酷分配合作商的私钥
$puid: 合作商用户唯一标识(上一参数)
Not Null
type 结果类型
1.直接打印结果 2.重定向URL
1
reurl 转向URL(必须进行URL编码,type=2有效) Null

3、返回结果:

① 直接打印(type=1)

结果为JSON数据:
$result = json_encode(
array(
  0=>标志位(0.失败 1.成功),
  1=>信息(绑定成功或者失败的提示信息),
  2=>用户信息:
  array(
   0=>成功绑定youku的用户名,
  )
)
) 

② 转向URL以参数形式传递(type=2 推荐)

$reurl?result=base64_encode($result)

③ 常见的返回结果

绑定成功:
[1,"YouKu:Bind successful!",["panzhiqi"]]
绑定失败:
[0,"YouKu:Fail(3)",[]]
0.参数不合法 1.登陆成功,但是插入绑定失败 2.登陆成功,但是更新绑定失败 3.绑定用户的用户名密码错误: