类似腾讯开放接口对应QQ用户的openid的生成方法?


不知道那位大牛知道腾讯的开放接入返回的openid是怎么生成的,而且我观察他的每个接入网站生成的对应用户的openid都是不一样的,而且能保证唯一,这个大家有什么比较好方法请赐教,还有就是这个是靠算法生成记录到数据库呢?还是直接靠算法得到的。。。

php mysql 算法

给我一斤蜜饯 12 years, 5 months ago

签名过程涉及到的概念

  • AccessKey: 公钥,简称ak
  • SecretKey: 密钥,可以在平台申请,简称sk
  • Signature: 利用公钥,密钥和用户的请求内容算出的签名。用来验证用户。

每次请求都需要把相应的签名通过querystring的方式发送,比如:

   
  Sign=MBO:aCLCZtoFQg8I:WQMFNZEhN2k8xxlgikuPfCJMuE8%3D
 

签名组成

   
  Sign=Flag:AccessKey:Signature
 
  • Flag: 表明签名的对象。云存储需要根据Flag来判断签名的具体对象。
   
  Flag=[M|B|O|T|I|S],可以是多个组合,但是必须顺序给出。
  
M: 请求的method, 可以是[PUT|GET|POST|DELETE|HEAD]
B: bucket name
O: object name
T: 链接的有效截止时间。 比如 time=1312956443表明在时间点Wed Aug 10 2011 14:07:23前有效
I: 访问ip限制。比如ip=192.168.0.1表示只有此ip能访问该链接
S:限制上传object大小,比如size=100,表示不能上传大小超过100B的object
  • AccessKey: 参考如上介绍
  • Signature: 签名 <coding-4 lang="php"> Signture=urlencode(base64_encode(hash_hmac('sha1', Content, SecretKey,true))) </coding>

content由Flag、 bucket、object,以及各个参数组成。

原理
用户根据自己申请的AccessKey,SecretKey和请求的内容计算出Signature,然后通过querystring的方式发生给云存储。
云存储按照AccessKey知道对应的SecretKey,然后根据Flag来算出签名,如果云存储计算的与请求的相同,则认证通过。否则返回403

举例

现在需要上传资源到bucket: mybucket
其中object为: /myobject
但是要求此链接在时间点“Wed Aug 10 2011 14:07:23”前有效,同时只允许ip:192.168.0.1访问。 上传文件的大小不能超过100字节.列表如下:

   
  bucket:mybucket
  
object: /myobject
time:1312956443
ip=192.168.0.1
size=100
Flag=MBOTIS

Flag=MBOTIS表示需要对method,bucket,object,time,ip,size做签名。
注意:flag必须严格按照[M|B|O|T|I|S]的顺序。那么contet计算如下:

   
  Content= Flag + "\n"
  
+ "Method=PUT" + "\n"
+ "Bucket=mybucket" + "\n"
+ "Object=/myobject" + "\n"
+ "Time=1312956443" + "\n"
+ "Ip=192.168.0.1" + "\n"
+ "Size=100" + "\n"

引用:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95

Mimori answered 12 years, 5 months ago

Your Answer