フロントエンドが秘密鍵を使用してバックエンドと通信するための安全な方法を実装しています。バックエンドが敏感サービス(モバイルバンキング)フロントエンドからバックエンドに署名するapiの呼び出し
まずある私はJWTを考えますが、トークンベースのアプローチされた2つの欠点を有する:a)フロントエンドは、トークンを取得する必要があります
、これはそれを意味いくつかの認証データをバックエンドに送信する必要があります。フロントエンドがこれを行うことができれば、誰でもこれを行うことができます。
b)トークンを取得する安全な方法があっても、誰でもChromeデベロッパーツールを起動し、有効期限が切れていない間に使用することができます。
したがって、代替の方法は、フロントエンドからの各要求に秘密鍵で署名することです。鍵は、バックエンドとフロントエンドに知られています。フロントエンドは、鍵を秘密にするためにバンドルされており、uglifiedされています。要求URLとそのペイロードを連結し、秘密鍵で暗号化し、結果のハッシュをヘッダーに送信します。バックエンドは要求を取得し、同じ暗号化を行い、ヘッダーを比較します。それらが等しい場合、要求を行います。
これは、3つの質問に私をリード:
これは本当に要求が盗聴されている場合でも、URL +ペイロードが同じでない限り、それは再現できないことを意味するのでしょうか?私は行方不明のものがありますか?
このアプローチを実装しているJSライブラリはありますか? (またはバックエンドにも何か - 私はDjangoを使用しています)
もっと良いアプローチがありますか?
これは特に安全な方法ではありません。これは難読化によるセキュリティです。 鍵はuglificationによってフロントエンドに隠されていますが、十分に試してみると誰かが見つけることができます。 – user184994
OAuthなどの試したことを試してみてください。フロントエンドとバックエンドに利用できるライブラリ/ツールキットがあります(Django OAuth Toolkit) – AndrewS
JWTは、再作成しようとしているものを正確に行いますが、はるかに安全な方法です。秘密がクライアント側にある場合は、それを把握するのは簡単です。 – Trickycm