# 免登陸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);
```
```