0

皆さん、

部門内で RESTful API サービスにアクセスするコンシューマー アプリケーションを追跡する最も簡単な方法は何ですか。アクセスを制限しません - 認証/承認なし - 呼び出し用に開かれた、信頼できる環境。OAuth AuthZ サーバーや API 管理のようなツールはまだありませんが、いずれそこに向かう可能性があります。

今のところ、X-Client-Id のようなカスタム HTTP ヘッダーを含めるようコンシューマーに要求し、それをサーバー側で統計などのためにログに記録することを考えました。 ...将来的に変更するコードを少なくする必要がある場合に最適な代替手段は何ですか?

  • Authorization: OAuth トークンに「clientId」を含める (アクセス トークンと同様)
  • Authorization ヘッダーに JWT トークンを含める (見た目が多すぎる - 単純なクライアント ID 追跡のための署名、base 64 など...)

任意のアイデアをいただければ幸いです

4

2 に答える 2

0

私たちは最近、これをRESTプラットフォームの1つに実装し、あなたが言及したポイントの両方、つまりAuthorizationヘッダーとJWTトークンを組み合わせて使用​​しました。ただし、JWT は認証と access_token (oauth トークン) の取得専用であり、後で実際のリソース API の呼び出しで使用されます。この状況をどのように処理したかについて説明します。それをどのように実装するかを決定してください。

1) 認証

クライアントは JWT を認証サービス (/api/oauth2/auth) に送信します。(JWT についてもっと読みたい場合は、ここここで読むことができますGoogle による JWT の実装方法と、spring-security-jwt ライブラリを使用してすべての署名と暗号化/復号化を処理する方法について説明します)。署名を復号化して検証した後、JWT から「clientId」を取得し、サーバーがすべての認証を行った後、「refresh_token」と「access_token」で応答します。サーバーは access_token も保存し、それを clientId にマップして、クライアントが access_token を使用してリクエストを行うときに、どのクライアントがリクエストを行っているかを知ることができるようにします。access_token はしばらくすると (理想的には 1 時間で) 期限切れになります。期限が切れると、クライアントは「refresh_token」を使用して、refresh_token を更新トークン URL (/api/oauth2/auth/token) に投稿することで新しいアクセス トークンを取得します。

2) 認可

クライアントは「access_token」を取得し、アクセス トークンを使用して、他のすべての API (/api/*) で後続のすべての要求を行います。理想的には、access_token は「Authorization」ヘッダーの一部として送信されます。サーバーは要求フィルターを使用して (JAX-RS を使用している場合は、ContainerFilterRequest のようなものを使用して特定の URL パターンにフィルターを追加し、それらをインターセプトできます)、各要求をフィルター処理し、Authorization ヘッダー値を解析します。ヘッダーから access_token を取得し、access_token から手順 1 でマップした clientId を取得できます。セキュリティ フィルターで他の承認ロジックを実行できます。すべてが成功した場合は、この情報を使用して、その clientId とクライアントが行った要求をログに記録できます。

このように、一石二鳥です。セキュリティ層を実装し、顧客に関する情報をログに記録します (電話の種類、回数など)。セキュリティ フィルタをまだ実装したくない場合 (将来実装される可能性があると述べたように)、現時点では、クライアントは "clientId" (base64 でエンコードされているかどうかにかかわらず) を次の一部として渡すことができます。 「承認」ヘッダー。すべての呼び出しが「信頼できる」ネットワークからのものであれば、安全ではありませんが問題ありません。このように、実際に JWT および Oauth ベースのセキュリティ レイヤーを実装する場合、必要な作業は、ContainerFilterRequest ロジックを変更して、クライアント ID の代わりに access_token を解析することだけです (手順 2 で説明したように)。

これが役立つことを願っています!セキュリティ フィルターの詳細については、次の回答を参照してください: Basic Authentication of a resource in Dropwizard。dropwizard と書いてありますが、主に JAX-RS について語っています。

于 2013-12-29T22:45:32.833 に答える