web-dev-qa-db-ja.com

単純なJWTを使用した公開API認証

APIのセキュリティメソッドを探しています。ユーザー/パスワードを使用したクライアントログイン後にJWTアクセストークンを使用すると、独自のAPIを使用する内部Webアプリでうまく機能します。ただし、他のシステム/クライアントがデータを消費するために使用できる外部APIをどのように保護するかを検討しています。

通常、client_idとclient_secretを提供するAPIサービスが表示されます。ただし、これはOAuth2で使用されることになります。このような大きな仕様の成功した安全な実装に自信がなく、auth0に依存したくないので、実装する必要はありません。

アプリケーションが使用する外部APIに単純なJWTを使用する場合、ユーザー/パスワードとは異なるIDタイプを使用する必要があると思います。 IDやセキュアキーなど。何が一番いいですか?

3
Edward

はい、単純なトークンでパブリックAPIを安全に使用できます。

このトークンの構造:

  • 一意の部分またはそれ自体が一意である必要があります(これがIDになります)
  • ランダムな部分

トークンを持っている人だけがAPIにアクセスできます。 APIへのリクエストごとに、それとともにトークンを送信します。 APIはトークンを検証し、有効な場合はデータを返します。

しかし、トリッキーな質問は、どのようにしてこのトークンを取得するのですか?

どこかに認証ページが必要になります。ユーザーが認証されたら、ユーザーにAPIトークンの作成/ダウンロードを許可できます。その後、このトークンを任意のユーザーまたは任意のアプリケーションに与えることができ、ユーザーは自分のデータにアクセスできます。

OAuth2は主にこのトークンを取得するプロセスを自動化するため、ユーザーはコピーと貼り付けなどの手動の手順を実行してトークンを共有する必要がありません。

過去にプレイしたゲームは、このスキームを使用してパブリックAPI:ギルドウォーズ2を作成しました。ユーザーは、ウェブサイトで自分のアカウントにアクセスするときに、トークンを作成してコピーし、アカウント情報を分析する他のアプリケーションにそれを与えることができます。

1
Gudradain