3.登錄認證
客戶端調用流媒體服務器接口,首先要做的是身份認證,認證通過後才可以調用流媒體服務器的接口。
服務器和客戶端通過“挑戰->應答”方式(challenge-response)進行身份認證交互,在這個過程中,客戶端需要調用兩次接口向服務器證明身份。認證過程中不需要傳遞密碼,密碼用於簽名驗證。
身份認證的過如下:
1)客戶端使用“用戶名”作為參數調用“login1”接口,向服務器發出身份認證請求
1.1)服務器確認用戶是否是有效的用戶:
1.2)若不是,則不做進一步處理,返回錯誤信息
1.3)若是,服務器產生一個“隨機數(挑戰字符串)”發送給客戶端
2)客戶端使用“用戶密碼”和“隨機數(挑戰字符串)”作為輸入,按約定的算法生成一個hash值,用該hash值作為 調用“login2”接口的參數,請求login2接口。
2.2)若認證通過,服務器返回“token”給客戶端,否者返回錯誤信息。
3.2.login1接口
- 用途
客戶端向服務器申請進行身份認證,服務器返回“挑戰字符串”給客戶端。 - 請求
users/login1?phone=13888888888
phone 【必選】 使用註冊的手機號作為登錄服務器的用戶識別信息。
- 響應
{ "code": 0, "data": { "count": 1, "items": [ { "phone": "13888888888", "chcode": "uts1m4" } ] } }
code 等於0,表示用戶有效,items段返回挑戰數據:
?phone 登錄用的手機號,下一步需要原樣帶入;
?chcode 挑戰字符串。
code 不等於0,其他值表示錯誤,此時 err_desc 的內容是錯誤描述。
3.2.login2接口
- 用途
對login1接口返回“挑戰字符串”進行hash運算,將運算結果提交給服務器,進行身份合法性認證。 - 請求
users/login2?phone=13888888888&hash=c869b2aab17c4c8e33f046e168ba4fd5
phone 【必選】 手機號碼。
hash【必選】 是使用用戶密碼和挑戰字符串作為輸入計算出的md5摘要值(hash),算法如下:
hash=md5(md5(password)+challenge_code)
算法描述:首先計算出密碼的hash值,然後在生成的密碼hash值尾部拼接上挑戰字符串形成新的字符串,最後計算這個新字符串的hash值。
hash算法采用md5算法,生成的摘要采用16進制編碼,編碼生成的字符采用小寫字母。
例如,字符串111111的hash值是 96e79218965eb72c92a549dd5a330112
- 響應
code >0 其他值表示錯誤,此時 err_desc 的內容是錯誤描述。
code 0 表示登錄成功,在data數據段返回token和用戶信息。
{
"code": 0,
"data": {
"count": 1,
"items": [
{
"_id": "5ad4594fe1382314030eabb2",
"name": "王小虎",
"email": "[email protected]",
"phone": "13888888888",
"cache": "mem",
"token": "6df901hvwqj4rqsj"
}
]
}
}
返回內容包括用戶信息和一個token屬性。
token 驗證字符串,用於後續接口的調用。
cache 用戶信息的存儲方式,如果是mem,則後續的接口調用中無需傳遞token參數,否者需要傳遞token參數。
3.3.logout接口
- 用途
退出登錄,服務器銷毀用戶登錄信息,作廢“token”。
建議客戶端在退出系統時總是調用該接口。 - 請求
user/logout?token=vvkphp5ca79c538n
- 響應
{ "code":0, }
3.登錄認證