web-dev-qa-db-ja.com

フロントエンドが安全に要求できる秘密のAPIキーをバックエンドに保存する方法はありますか?

私はGoogle Maps APIを使用しています。これには、クライアント側で使用する必要がある秘密鍵が含まれています。

安全に保管するための代替案をいくつか考えていました。それらの1つは、それをmy flaskデータベースに格納します。次に、フロントエンドはクエリを送信してそれを取得できます。

暗号化によってこれを安全に行う方法はありますか?

2
SumakuTension

暗号化されていない形式でクライアントに到達したものはすべて、クライアントからアクセスできます。これを回避する方法はありません。サーバーからの応答でクライアントが実行していることを制御できません。この状況でできる最善のことは、難読化すること、および/または誰かがキーに直接アクセスするのをより困難にすることです。

このような状況で、自分の権限の下でクライアントがサードパーティに直接電話をかけられるようにしたい場合は、クライアントへの特定のアクセス権を付与できるようなトークン、チケット、または署名システムが必要ですサードパーティプロバイダーがクライアントに資格情報を提供せずに確認できる方法で。

私はそれを調査するのに多くの時間を費やしませんでした、それは実際にこのサイトの範囲内でGoogles APIの詳細を支援することではありませんが、これがどのように機能するかの例として、このAPIは 署名システムを提供するようです 。私が正しく理解している場合は、クライアントが行う必要のある要求に対して裸のURLを作成し、資格情報を使用してAPIから署名付きURLを取得します。これはサーバーで発生し、クライアントにキーを提供することはありません。

この署名付きURIはクライアントに返され、クライアントは呼び出しを実行でき、APIはこれがユーザーの権限と請求に関連付けられていることを認識します。おそらく、この署名付きURLにはある種の時間制限があります。これらの詳細については、APIドキュメントを参照してください。

3
JimmyJames

キーを安全に保管したい場合は、サーバー側にキーを残して、そこから呼び出します。余分なホップを避けたい場合は、キーをある程度妥協する必要があります。クライアント側で、決定されたクライアントから隠すことはできません。ユーザーはブラウザを完全に制御できます。ユーザーが元に戻すことはできません。

4
Ryathal

Googleマップの秘密鍵が安全でないことを心配する必要はないと思います。 Google Maps APIコンソールでリファラーに制限をかけることができます。

Googleは以前、そのキーをhtmlのヘッドタグに保持することを提案していました。これ自体は、あまり心配する必要がないことを示しています。

これを読むSOリンク: https://stackoverflow.com/questions/8729976/does-google-maps-javascript-api-key-v3-need-to-be- keep-secret-in-html-checked

https://stackoverflow.com/questions/1364858/what-steps-should-i-take-to-protect-my-google-maps-api-key

0