Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303342
  • 博文数量: 153
  • 博客积分: 3347
  • 博客等级: 中校
  • 技术积分: 1556
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-30 17:50
文章分类

全部博文(153)

文章存档

2013年(7)

2012年(21)

2011年(46)

2010年(16)

2009年(63)

我的朋友

分类: 系统运维

2012-12-23 11:57:25

业务需要,正在研究.

基本有以下三种方案

1.集中管理Session. 实现很简单,但缺点是 每次页面刷新都需要访问一次或两次 Session管理服务器, 感觉代价太高,不打算使用.  (Ucenter即使用这种方式)

2.统一登录.  所有登录及退出登录操作全由登录服务器 提供页面并完成.  缺点是各个应用无法个性化登录页面.  暂时不打算采用. (CAS使用这种方式)

3.同步方式 .  应用自行保存登录状态,并在登录状态改变(登录及退出登录时),同时通知登录服务器. 另外.在进行需要登录才能进行的操作时,向登录服务器获取当前登录状态. 打算按这个方式来实现.  缺点:无法即时更新登录状态.

下面只描述第三种方式的实现过程.

一.以下四种情况,应用需要与登录服务器交互
1.用户在应用中点击登录按钮时,向登录服务器获取登录状态
2.用户在应用中登录后.更新登录服务器状态
3.用户在应用中退出登录后,更新登录服务器状态
4.用户在应用中进行购买/发言等操作时,先向登录服务器获取登录状态

二.交互方式
1.使用URL Redirect方式跳转到登录服务器指定地址
2.同时提供回调地址(也可在登录服务器上预设),登录服务器处理完成后,同样使用Url Redirect跳转回应用进行后继处理.

三.登录服务器
1.要用Session保存每个用户的登录状态,这导致所有应用的Session过期时间统一.
2.提供两个跳转方式的接口,分别用于处理 更新及获取登录状态
3.提供一系列接口 用于保存用户信息及获取用户信息,具体略

API功能列表

 

功能

同步/异步

Action

1

注册

同步

Register

2

删除用户

同步

Release

3

登录

同步

Login

4

退出登录

同步

Logout

5

修改密码

同步

ChangePassword

6

重置密码

同步

ResetPassword

7

修改用户名

同步

Rename

8

增加 附加信息

同步

Insert

9

删除 附加信息

同步

Delete

10

修改 附加信息

同步

Update

11

查询 附加信息

同步

Select

12

获取联合登录区域

同步

UnionShow

13

查看联合登录相关信息

同步

UnionGet

14

(*)更新登录状态

异步

UpdateLogin

15

(*)获取登录状态

异步

GetLogin



网络安全:

1.只允许内网访问,只允许固定IP访问

2.每个应用有自己的KeySecret, Secret不在网络上传输

3.应用方发起的请求:

所有请求参数组合成数组,Json编码,使用应用方Secret进行加密

请求格式:From=<应用方的Key>&Request=<加密信息>

4.用户中心回复应用方的请求:

所有回复参数组合成数组,Json编码,使用应用方Secret进行加密

回复格式为纯文本

5.用户中心发起的请求:

所有请求参数组合成数组,Json编码,使用应用方Secret进行加密

请求格式:Request=<加密信息>

6.应用方回复用户中心的请求:

所有回复参数组合成数组,Json编码,使用应用方Secret进行加密

回复格式为纯文本

7.所有请求及回复参数中,增加一个Time参数为当前时间戳.

接收方检查时间戳与当前时间的间隔

缺少此参数,丢弃此请求

超出10,丢弃此请求

8.请求或回复中缺少相应参数,则放弃本次通讯

如无法解密,同样放弃本次通讯



所有返回参数格式

1.Status:Error/Success

2.ErrorMessage:错误信息(UTF-8)

3.ErrorCode:错误编码

4.其它成功参数


错误编码

错误消息

1

用户名(Name)不允许特殊字符

2

用户名(Name)已经被使用

3

用户不存在

4

用户名(Name)不匹配

5

密码(Password)错误

6

禁止登录

7

附加信息(Key)已经存在

8

附加信息(Key)不存在

 

 


1.注册

参数

Name 用户名

Password 密码

如果有其它参数,作为 文本附加信息处理

 

失败返回

error

1.用户名(Name)不允许特殊字符

2.用户名(Name)已经被使用

 

成功返回

success

Id:用户唯一编号

 

 

2.删除用户

参数

Id 用户编号

Name 用户名

 

失败返回

error

3.用户不存在

4.用户名(Name)不匹配

 

成功返回

success

 

 

技术细节

伪删除

 

 

3.登录

参数

Name 用户名

Password 密码

 

失败返回

error

3.用户不存在

5.密码错误

6.禁止登录

 

成功返回

success

Id:用户唯一编号

 

技术细节

此接口并不同步登录,只是检查是否允许登录

 

 

4.退出登录

参数

Id 用户编号

 

失败返回

error

3.用户不存在

 

 

成功

success

 

 

技术细节

此接口并不同步登录状态,只是检查参数合法性

 

 

5.修改密码

参数

Id 用户编号

Password 密码

New 新密码

 

失败返回

Error

3.用户不存在

5.密码错误

 

成功

 success

 

 

 

6.重置密码

参数

Id 用户编号

 

失败返回

3.用户不存在

 

成功返回

Password 新密码

 

技术细节

随机生成一个8位数字字母串

 

 

7.修改用户名

参数

Id 用户编号

Name 新用户名

 

失败返回

Error

1.用户名不能包含特殊字符

2.用户名已经被使用

3.用户不存在

 

成功

Success

 

 

技术细节

用户名要唯一

 

 

8.增加附加信息

参数

Id 用户编号

Key 附加信息的名称

Value 附加信息的值

ValueType (Text/File) 文本/文件

 

失败返回

3.用户不存在

7.附加信息(Key)已经存在

 

成功返回

 

 

技术细节

同一用户的附加信息名称要求唯一

 

 

9.删除附加信息

参数

Id 用户编号

Key 附加信息的名称

 

失败返回

3.用户不存在

8.附加信息(Key)不存在

 

成功返回

 

 

 

10.修改附加信息

参数

Id 用户编号

Key 附加信息的名称

Value 附加信息的值

ValueType Text/File

 

失败返回

3.用户不存在

8.附加信息(Key)不存在

 

成功返回

 

 

 

11.查询附加信息

参数

Id 用户编号

Key 附加信息的名称

 

失败返回

3.用户不存在

8.附加信息(Key)不存在

 

成功返回

Value 附加信息的值

 

 

12.获取联合登录区域

参数

Redirect 登录后的跳转地址

 

失败返回

 

 

成功返回

Html 视图代码

 

技术细节

 

 

 

13.获取联合登录相关信息

参数

Id 用户编号

 

失败返回

3.用户不存在

 

成功返回

Info:Array(

  array(

    '<合作方>',

    '<合作方编号>'

  ),

  ...

)

合作方:

百度

新浪微博

腾讯微博

QQ

360

800

支付宝

 

 

 

 

 

14.(*)更新登录状态

参数

Id 用户编号

Redirect 完成后的跳转地址

 

失败返回

 

 

成功返回

 

 

 

15.(*)获取登录状态

参数

Redirect 完成后的跳转地址

 

失败返回

 

 

成功返回

Id 用户编号

 



表结构

User 用户表

Id

用户编号

主键

Name

用户名

唯一

Password

密码

MD5之后

Created

创建时间

时间戳

Updated

最后登录时间

时间戳

IP

最后登录IP

 

Times

总登录次数

 

Deleted

是否已删除

/

 

用户附加信息表

User_Info

Id

 

主键

UserId

用户编号

外键

Key

附加信息名称

UserId一起唯一

Value

附加信息的值

 

ValueType

附加信息类型

 

Created

 

 

Updated

 

 

 

User_Union 联合登录信息

Id

 

主键

UserId

用户编号

外键

UnionName

联合登录方名称

百度

新浪微博

腾讯微博

QQ

360

800

支付宝

UnionValue

联合登录信息值

 

Created

 

 

 



实现细节,单独联系我.
阅读(664) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~