# 免登陆URL生成规则
## API文档
### 免登url域名
```
<pre class="calibre26">
```
https://[独立部署OSX前端域名]/#/pages/auto-login/auto-login?
```
```
#### 输入参数(Get请求方式传参)
参数 是否必须 参数类型 限制长度 参数说明 user\_token yes string 255 用户唯一性标识,对应唯一一个用户且不可变 (用not\_login作为uid标记游客用户) token yes string 255 请求唯一标识,标识该免登陆url仅单次有效 appKey yes string 255 接口appKey,应用的唯一标识 endtimestamp yes String 20 请求有效期,截止有效时间。1970-01-01开始的时间戳,秒为单位。 **redirect** (不参与签名) **no** string 255 登录成功后的重定向地址(需要进行urlencode编码),可以直达OSX短说的任意页面,如果不带redirect参数,默认跳转到OSX短说首页 sign yes string 255 MD5签名,详见 [【签名规则】](http://oa.xiangtian.ren/index.php?mod=corpus&op=list&cid=58#fid_619)#### 免登录地址示例
```
<pre class="calibre26">
```
http://osxfenew.demo.opensns.cn/#/pages/auto-login/auto-login?user_token=14359234985&token=dsfdlsjglfdsgjfkdsgfhsd&endtimestamp=1520559858&appKey=testappKey&sign=49b12bc5579a2a2a4652a68cd53c1e5e&redirect=https%3a%2f%2fosxfenew.demo.opensns.cn%2f%23%2fpackageA%2fforum-detail%2fnormal%3ffid%3d44
```
```
#### 【特别提醒】免登录生成工具链接
OSX测试地址待开发: >
### 注意事项
1. **redirect** 参数在拼装免登录地址时候需要进行URLEncode编码,否则会导致请求解析报错。
2. 为了确保客户端每次请求到都是最新的免登录url,客户端每次向服务器发的请求不能是固定的,以避免请求被缓存。
3. OSX免登录url经过签名,**该url地址5分钟失效,请务必在生成地址后立即使用**,使用后页面会重定向进入OSX短说,每次通过免密链接进入会重新登录OSX,登录态默认保持(用户清除或系统自动清除缓存情况除外)。
4. 开发者服务器端需要开发一个支持重定向的接口实现动态生成免登录url地址,该接口地址配置在客户端,用户通过点击该地址访问OSX短说。
5. **appSecrect** 是OSX短说签名验证的关键密钥,**切勿**作为参数加入免登URL,否则将导致appSecrect泄露,由此造成的损失OSX短说概不负责。
6. OSX免登录url携带token参数,改参数会在后续登录流程“用户信息获取”接口中回传给开发者服务端,开发者服务端可根据该参数判断本次请求有效性。
#### php代码示例
```
<pre class="calibre26">
```
/**
* 测试生成免登录url
* 免登录地址涉及到的参数包含
* $user_token,$redirect,$appKey,$appSecret,$endtimestamp等参数
*/
$appKey = 'AppKey';//填写自己应用的appKey
$appSecret ='AppSecret';//填写自己应用的AppSecret
$endtimestamp = time()+5*60;//当前时间+5分钟,5分钟有效期,单位秒
$user_token = '11132436534';//开发者服务端系统用户唯一标识
$token = 'sdgfkjlsgfdjlgjlfjs';//请求有效性标识,可以做单次有效校验
$redirect = "https://osxfenew.demo.opensns.cn/#/packageA/forum-detail/normal?fid=44";//回调地址,不参与sign签名
$url = "http://osxfenew.demo.opensns.cn/#/pages/auto-login/auto-login?";
$url = $url.'user_token='.$user_token.'&token='.$token.'&endtimestamp='.$endtimestamp.'&appKey='.$appKey;
//用于签名的数组
$sign_array=[
'endtimestamp'=>$endtimestamp,
'user_token'=>$user_token,
'token' => $token,
'appKey'=>$appKey,
'appSecret'=>$appSecret
];
//数组按键名升序排列处理后['appKey'=>$appKey,'appSecret'=>$appSecret,'endtimestamp'=>$endtimestamp,'token' => $token,'user_token'=>$user_token]
ksort($sign_array);
//一维数组转字符串,用''拼接。等价于$appKey.$appSecret.$endtimestamp.$token.$user_token
$sign_before_str = implode('',$sign_array);
//通过MD5加密成sign
$sign=md5($sign_before_str);
//拼接成最终的免登陆URL
$autourl = $url.'&sign='.$sign.'&redirect='.urlencode($redirect);
```
```