Baidu マップ アプリケーション アクセスのホワイトリストを構成する方法

バイドゥの地図アプリは4種類あり、モバイル端末(iosとAndroid)はak不要、ブラウザ端末はRefererホワイトリストの設定が必要、サーバー端末はIPホワイトリストの設定が必要です。

次に、公式のホワイトリスト構成に基づいてさらに説明します。

1.ブラウザ側のホワイトリスト

リファラーとは?http 要求ヘッダーには Referer フィールドがあり、現在の要求の URI を含むドキュメントの URL を示すために使用されます。
たとえば、www.baidu.com にアクセスすると、サーバーは画像やその他のリソースを含む HTML ドキュメントを返し、これらのリソースを取得するためにサーバーに http 要求を送信します。これらのリソース フィールドは、このリソースを含む URL アドレスを識別します。
ここに画像の説明を挿入
したがって、Referer ホワイトリストを構成するときは、Referer にドメイン名を入力して入力するだけです。ローカルにデプロイされたプロジェクトの場合、Referer は localhost です。サーバー上で実行されているプロジェクトの場合、対応するサーバーの IP またはドメイン名を入力する必要があります。
ここに画像の説明を挿入

2. サーバーのホワイトリスト

実際の開発では、Java で書かれたサーバーや、JavaScript で書かれた Web サイド プロジェクトを使用しますが、これらのプロジェクトは最終的に指定されたサーバーにデプロイされ、その IP が決定され、IP ホワイトリストに登録するだけで済みます。ここでの焦点は、IP が不明な状況を解決することです。
IP の不確実性があるのはなぜですか? たとえば、uniapp を使用して開発されたアプリでは、サーバー側 API に直接アクセスします。開発には JavaScript を使用していますが、JavaScript はさまざまな携帯電話で動作し、固定サーバーにデプロイされていないため、IP アドレスが多く、特定できません。
IP が不明なこの状況では、アプリと Baidu マップ サーバーの間に中間層を追加できます。アプリは中間層を介して要求を Baidu マップ サーバー API に転送し、それによって要求 IP を修正します。
ここに画像の説明を挿入

この中間層は、Java によって開発された安らかなインターフェイスにすることができますが、アプリが使用するインターフェイスの追加セットを開発する必要があります。次のように、プロキシ転送 nginx サーバーで構成することもできます。
ここに画像の説明を挿入

単純な構成のみが必要であり、Baidu Maps は、この種の不確実な IP 状況に対して、SN 検証を使用する 2 つ目の構成方法を公式に提供しています。SN 検証を選択すると、SK コードが取得されるため、IP ホワイトリストを構成する必要はありませんが、毎回サーバー リクエストを送信する前に、リクエスト パラメータと SK コードに従って SN コードを計算する必要がありますを参照してください

ここに追加して、JavaScript で sn コードを計算します。

/**
 * 计算规则在官方的Java版实现中有注明
 */
let params = {
    
    
	location: "31.225696563611,121.49884033194",
	output: "json",
	coordtype: "wgs84ll",
	ak: yourak,
}

let sn = this.calSn('/reverse_geocoding/v3/?', params , yoursk);

calSn(queryUrl, params, sk) {
    
    
	let md5 = require('js-md5');
	let paramString = this.toQueryString(params);
	let tempString = encodeURIComponent(queryUrl + paramString + sk);
	return md5(tempString);
},

toQueryString(params) {
    
    
	let paramString = "";
	for (let prop in params) {
    
    
		paramString += `${
      
      prop}=${
      
      encodeURIComponent(params[prop])}&`
	}
	return paramString.substring(0, paramString.length - 1);
}
/**

snコードを計算する過程で、リクエストパラメータの値がエンコードされるので、実際にパラメータを渡す場合は、エンコード処理後にパラメータ値も渡す必要があります。そうしないと、「snコードの検証に失敗しました」というエラーが発生します。 .

おすすめ

転載: blog.csdn.net/weixin_42089228/article/details/126198834