小米應用商店:MAC簽名驗證

來源: 小米開放平臺
作者:小米開放平臺
時間:2020-09-25
17757
小米開放平臺一些API需要進行MA C驗證,在調用API時用MAC加密算法對請求進行加密,并將結果放到請求的header中。

1.API MAC簽名算法

小米開放平臺一些API需要進行MA C驗證,在調用API時用MAC加密算法對請求進行加密,并將結果放到請求的header中。

1.1 MAC計算

·請求內容標準化

標準化的請求字符串,就是用指定的請求屬性按照某個規(guī)則拼接而成的字符串。在這里,其實標準化請求字符串,就是將nonce,HTTP METHOD,HOST,URI,QUERY以換行符(即:n)為連接符,合并起來得到的字符串(格式串結尾增加n),其中涉及到屬性:

1601002846(1).png

·標準化示例

54897465748976549:21459478nGETnopen.account.xiaomi.comn/user/profilenclientId=xxx&token=xxxn

注意:上述換行符“n”僅用于展示

·MAC計算

客戶端使用MAC算法和MAC密鑰來對“標準化的請求字符串”進行加密計算出消息認證碼,MAC算法有hmac-sha-1和hmac-sha-256兩種,我們目前只支持hmac-sha-1。

mac=HMAC-SHA1(mac_key,標準化的請求字符串)

MAC計算示例,以請求用戶基本信息API為例說明:

請求地址:https://open.account.xiaomi.com/user/profile

請求參數(shù):

clientId=179887661252608&token=eJxjYGAQydknLLCFsVyIR-DxSqdTnQFGfX4yDAwMjAzxQJIheJfnRTDtvAhMM8SE_2FgWDw7Rg3MYzdUMFIwVjABMplzE5MBClYRuw

nonce:2870867952176701445:23282360

HTTP方法:GET

拼接得到標準化字符串:

2870867952176701445:23282360nGETnopen.account.xiamomi.comn/user/profilenclientId=179887661252608&token=eJxjYGAQydknLLCFsVyIR-DxSqdTnQFGfX4yDAwMjAzxQJIheJfnRTDtvAhMM8SE_2FgWDw7Rg3MYzdUMFIwVjABMplzE5MBClYRuwn

Mac Key:

ORhx44qK6Alqf8vt2rGB5f-oPq0

簽名結果輸出(已Base64編碼):

9uvros2WcjMaJ3pH25eQZU9p5pA=

1.2 MAC請求格式

·Header格式說明

采用MAC簽名驗證調用API,需要將相關簽名信息放入請求的HTTP請求的header中,第三方在發(fā)送API請求時需要在請求header中添加Authorization字段。Authorization字段內容如下:

Authorization:MAC access_token="token value",nonce="隨機碼",mac="簽名值"

·字段說明:

access_token:授權時下發(fā)的訪問令牌

nonce:隨機串,計算mac時候使用的nonce

mac:按照上面的方法計算得到的結果(例如:9uvros2WcjMaJ3pH25eQZU9p5pA=)

2._xmSign簽名算法

驗證用戶密碼接口中的_xmSign字段基于API MAC簽名算法生成,兩者的區(qū)別在于MAC簽名計算簽名的時候使用的是mac_key,_xmSign計算用的是client_secret。

_xmSign=HmacSha1(client_secret,callback標準化字符串)

其中_xmNonce和_xmSign不參與標準化。

_xmSign簽名驗證示例:

第三方提供的Callback:http://third_url.com/xm

小米驗證成功之后調用的callback:

http://third_url.com/xm?xmResult=true&xmUserId=1909031&code=93D6A6663C1095587F68281E654D5526&_xmNonce=5964262989045079397%3A24012419&_xmSign=m%2FM1Ia6fOBfKWUbae5G5UXnqh5I%3D

其中_xmNonce=5964262989045079397:24012419,_xmSign=m/M1Ia6fOBfKWUbae5G5UXnqh5I=

參數(shù):

xmResult=true&xmUserId=1909031&code=93D6A6663C1095587F68281E654D5526(_xmNonce和_xmSign不參與標準化)

nonce:5964262989045079397:24012419

HTTP方法:GET

拼接得到的標準化字符串:

5964262989045079397:24012419nGETnxiaomi.comn/n&code=93D6A6663C1095587F68281E654D5526&xmUserId=1909031&xmResult=truen

client secret:

ORhx44qK6Alqf8vt2rGB5f-oPq0

簽名結果輸出(已Base64編碼):

m/M1Ia6fOBfKWUbae5G5UXnqh5I=

立即登錄,閱讀全文
版權說明:
本文內容來自于小米開放平臺,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家