0

システムで OAuth 2.0 を使用する予定ですが、セキュリティ レベルに満足していません。OAuth 2 は業界の標準になったので、何か見落としがあるのではないかと思います :-)

システム API を保護する必要があります。API には、ユーザー情報へのアクセスを公開するものと公開しないものがあります。ユーザーはログインせずにシステムを使用することができ、後で身元確認が必要な操作を行う場合、資格情報を提供する必要があります。

そのため、最初にクライアント資格証明認可付与を使用してクライアントを識別します。秘密鍵を使用する方がより安全に見えるため、このモードをお勧めします。クライアントは、ユーザー エージェントにロードされる Java スクリプト アプリケーションです。フローは次のとおりです。

  1. ユーザーエージェントは、アプリケーションのバックエンドにアプリケーションをロードするように要求します
  2. クライアントのバックエンドは認可サーバーを呼び出してクライアントを認可します。client_id と secret_key を提供します。成功するとアクセストークンが発行されます。
  3. クライアントにロードされるアプリケーションには、アクセス トークンが含まれます。
  4. クライアントはトークンを使用してシステム API にアクセスします。

Q: アプリケーションの URL は誰でも使用できます。アプリケーションをロードすると、アクセス トークンが手に入ります。client-id やシークレットを提供する必要はありません...それはただそこにあります。では、セキュリティはどこにありますか?

ユーザーを特定する必要がある場合は、暗黙の承認付与を使用することを考えました。その場合、秘密鍵はクライアントの秘密ではないため、使用しません。ただし、client_id を知っていて、ユーザーを登録していれば、誰でもアクセス トークンを取得できます。

Q: 再びセキュリティに関する質問です。システムにアクセスしたクライアントが実際のクライアントであることをどのように確認できますか?

ありがとう、

アビラム

4

1 に答える 1

0

ユーザーがアクセストークンを取得することを気にするのはなぜですか? そのトークンを使用すると、そのユーザーに属するデータのみがアプリに公開されます。

ユーザーを識別する必要がある場合: バックエンド サーバーが既に存在するため、コード フローも使用できます。ユーザーとクライアントの両方が識別されます。

ユーザーを特定する必要がない場合: クライアントのバックエンド サーバーのプロキシは許容されますか? アクセス トークンを保持できるのはプロキシのみであり、実際のクライアントであることを確認できます。唯一の問題は、プロキシが各 HTTP 要求の発信元をチェックして、同じドメインからのものであることを確認する必要があることです。JavaScript アプリケーションは、リクエストをプロキシに送信するときに、いくつかのカスタム ヘッダーを追加できます。

于 2013-07-31T17:38:25.443 に答える