2017-10-20 5 views
1

フロントエンドが秘密鍵を使用してバックエンドと通信するための安全な方法を実装しています。バックエンドが敏感サービス(モバイルバンキング)フロントエンドからバックエンドに署名するapiの呼び出し

まずある私はJWTを考えますが、トークンベースのアプローチされた2つの欠点を有する:a)フロントエンドは、トークンを取得する必要があります

、これはそれを意味いくつかの認証データをバックエンドに送信する必要があります。フロントエンドがこれを行うことができれば、誰でもこれを行うことができます。

b)トークンを取得する安全な方法があっても、誰でもChromeデベロッパーツールを起動し、有効期限が切れていない間に使用することができます。

したがって、代替の方法は、フロントエンドからの各要求に秘密鍵で署名することです。鍵は、バックエンドとフロントエンドに知られています。フロントエンドは、鍵を秘密にするためにバンドルされており、uglifiedされています。要求URLとそのペイロードを連結し、秘密鍵で暗号化し、結果のハッシュをヘッダーに送信します。バックエンドは要求を取得し、同じ暗号化を行い、ヘッダーを比較します。それらが等しい場合、要求を行います。

これは、3つの質問に私をリード:

  • これは本当に要求が盗聴されている場合でも、URL +ペイロードが同じでない限り、それは再現できないことを意味するのでしょうか?私は行方不明のものがありますか?

  • このアプローチを実装しているJSライブラリはありますか? (またはバックエンドにも何か - 私はDjangoを使用しています)

  • もっと良いアプローチがありますか?

+0

これは特に安全な方法ではありません。これは難読化によるセキュリティです。 鍵はuglificationによってフロントエンドに隠されていますが、十分に試してみると誰かが見つけることができます。 – user184994

+0

OAuthなどの試したことを試してみてください。フロントエンドとバックエンドに利用できるライブラリ/ツールキットがあります(Django OAuth Toolkit) – AndrewS

+0

JWTは、再作成しようとしているものを正確に行いますが、はるかに安全な方法です。秘密がクライアント側にある場合は、それを把握するのは簡単です。 – Trickycm

答えて

2

あなたが望むようにバンドルしてください。要求を許可するセキュリティキーが内部にある場合、私は醜い(美化し)得ることができます。

http://jsbeautifier.org/

あなたが何らかの形でとにかくユーザーを認証する必要がありますので、「セッション」を確立するために個人データを送信する手段)の接続を暗号化するために、SSLを使用してちょうどJWTを使用しています。それは、ユーザー名、電子メール、パスワードまたはいくつかの "秘密"トークンにしましょう。

関連する問題