タオバオH5サイン暗号化アルゴリズムの詳細
淘宝網はh5アクセスとクライアント側に異なるアプローチを採用し、h5のjsコードにappsercretを保存するリスクが高いため、mtopはランダムに割り当てられたトークンを使用し、ユーザーのクッキーに保存され、クッキーを通じてサーバーによって割り当てられたトークンを持ち帰る、クライアントは割り当てられたトークンを使用して、要求したURLパラメータに対してダイジェスト値の符号を生成し、MTOPは、URLの改ざんと防ぐためにこのダイジェスト値およびクッキー内のトークンを使用してください。
処理方法
ローカル・クッキーのトークンが空になると(通常は初回訪問時)、mtopはエラー "FAIL_SYS_TOKEN_EXOIRED:: token expired" を受け取り、mtopはクッキーに書き込むためのトークンを生成します(response .cookies)。
2番目のリクエストでは、jsはクッキー内のトークン値を読み取り、合意されたアルゴリズムに従ってサインを生成します。サインはmtopリクエストにもたらされ、mtopはクッキー内のトークンと同じ方法でサインを計算し、要求されたサインと比較します。チェックはパスし、apiアンサーを返します。失敗プロンプトは "FAIL_SYS_ILLEGAL_ACCESS:: illegal request" です。
新しいトークンが書き込まれる一方で、jsは新しいトークンを使ってサインを再計算し、リクエストを再送信します。
クッキー内のトークンのセルフチェックについては、トークンはクッキー内で平文になっており、偽造される可能性があるため、出力クッキーには非対称鍵公開鍵で暗号化されたトークンが含まれており、MTOPはまずクッキー内のトークンがリクエストごとにサーバーから割り当てられたかどうかをチェックします(暗号化されたトークンと秘密鍵を使ってトークンを復元して戻り値の平文トークンと比較します)。
記号が生成する
符号の生成式について。
md5Hex(token&t&appKey&data)
e.g.: md5Hex("30dc68e5b4cf40ebd02fb05673c7e3b7&1572522062317&12345678&{"itemNumId":"1502111132496" ;}")
sign=4c1e7b6853fa7a5e1b8f7066ee22932f
実装コードです。
public static String calcSignature(String token, String timestamp, String appKey, String data) {
return DigestUtils.md5Hex(StringUtils.trimToEmpty(token) + "&"
+ timestamp + "&" + appKey + "&" + data);
}
public static void main(String[] args) {
String token="30dc68e5b4cf40ebd02fb05673c7e3b7";
String timestamp="1572522062317";
String sign = calcSignature(token, timestamp, "12345678", "{\"itemNumId\":\"1502111132496\quot;}");
System.out.println(sign);
}
トークン
m_h5tk: explicit token_expireTime としてフォーマットされ、response.cookies から取得されます。
トークンは 30dc68e5b4cf40ebd02fb05673c7e3b7 です。
有効期限は1572522062317です。
トークンの保存を担当するクラスでラップすることができます。
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Credentials implements Comparable<Credentials> {
private String _m_h5_tk;
private String _m_h5_tk_enc;
private static final int OFFSET = 60000;
public String getToken() {
return StringUtils.isEmpty(_m_h5_tk) ? null : _m_h5_tk.substring(0, _m_h5_tk.indexOf("_"));
}
public long getExpireTimestamp() {
long t = new Date().getTime() - OFFSET;
if (StringUtils.isEmpty(_m_h5_tk) || StringUtils.isEmpty(_m_h5_tk_enc)) {
return t;
}
try {
return Long.parseLong(_m_h5_tk.substring(_m_h5_tk.indexOf("_") + 1));
} catch (NumberFormatException e) {
return t;
}
}
public boolean isExpired() {
if (StringUtils.isEmpty(_m_h5_tk) || StringUtils.isEmpty(_m_h5_tk_enc)) {
return true;
}
return new Date().getTime() > getExpireTimestamp();
}
@Override
public int compareTo(Credentials o) {
return Long.compare(o.getExpireTimestamp(), this.getExpireTimestamp());
}
}
t
つまり、タイムスタンプは new Date().getTime() で取得される、という単純なものです。
アプリキー
固定値 パケットキャプチャツール経由のリクエストパラメータで利用可能、パラメータ名 appKey
データ
送信されたパラメータは、パケット取得ツールを介して、通常JSON文字列としてリクエストパラメータで利用可能です。
今回の記事は、タオバオH5サイン暗号化アルゴリズムについてです。淘宝網のH5符号の暗号化について、もっと詳しく知りたいなら、スクリプトハウスの過去の記事を検索してください、あるいは次の関連記事を引き続き閲覧してください、今後、スクリプトハウスをもっと支持することを願っています
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
html+css イメージスキャナ効果用
-
AmazeUIがモーダルボックスにフォームを埋め込んでモーダルインプットボックスを形成する
-
HTML5でオプションのスタイルシートを使ってWebサイトやアプリケーションにダークモードを追加する方法を解説
-
複数の画像を編集するためのキャンバス画像エディタの実装方法
-
ディテールキャンバスの描画Webフォントいくつかのメソッド
-
キャンバスを使用して画像サイズを圧縮する例
-
ダブルキャッシュを使用したCanvas clearRectによるスプラッシュスクリーンの問題を解決しました。
-
HTML5で実現する写真・カメラ機能
-
モバイルでiframeを拡大縮小するサンプルコード
-
HTMLでIMGをDIVコンテナのサイズに自動的に適応させる方法