web-dev-qa-db-ja.com

トークンベース認証とは

トークンベース認証が何を意味するのか理解したい。私はインターネットを捜したが理解できる何かを見つけることができなかった。

457
csharpbaby

私はそれがよく説明されていると思います here - 長い記事の重要な文章だけを引用してください:

トークンベースの認証システムの背後にある一般的な概念は単純です。ユーザー名とパスワードを使用せずに、ユーザーが特定のリソースを取得するためのトークンを取得するために、ユーザー名とパスワードを入力できるようにします。トークンが取得されると、ユーザーはそのトークン(一定期間特定のリソースへのアクセスを提供します)をリモートサイトに提供できます。

つまり、認証に1レベルの間接指定を追加する - 保護された各リソースに対してユーザー名とパスワードを使用して認証するのではなく、ユーザーはその方法で1回認証を行い、期限付きトークンを取得そして、セッション中のさらなる認証にそのトークンを使用します。

利点はたくさんあります。たとえば、トークンを入手したら、限られた時間と限られたリソースで信頼できる他の自動化システムに渡すことができますが、 not 自分のユーザ名とパスワードで信頼しても構わない(つまり、永久にまたは少なくとも自分がパスワードを変更するまで、アクセスを許可されているすべてのリソースで)。

それでも不明な点がある場合は、質問を編集して、何が100%明確ではないかを明確にしてください。

491
Alex Martelli

から - Auth0.com

トークンベース認証は、リクエストごとにサーバーに送信される署名付きトークンに依存します。

トークンベースのアプローチを使用する利点は何ですか?

  • クロスドメイン/ CORS: cookies + CORSは異なるドメイン間ではうまく機能しません。 HTTPヘッダーを使用してユーザー情報を送信するため、トークンベースのアプローチでは、任意のドメイン上の任意のサーバーに対してAJAX呼び出しを行うことができます。

  • ステートレス(別名:サーバー側のスケーラビリティ): セッションストアを保持する必要はありません。トークンは、すべてのユーザー情報を伝達する自己完結型のエンティティです。その他の州は、クライアント側のクッキーまたはローカルストレージに住んでいます。

  • CDN: あなたはCDNからあなたのアプリのすべての資産(例:JavaScript、HTML、画像など)を提供することができます、そしてあなたのサーバー側はちょうどAPIです。

  • デカップリング: あなたは特定の認証方式に縛られていません。トークンはどこでも生成される可能性があるため、これらの呼び出しを認証する単一の方法でどこからでもAPIを呼び出すことができます。

  • モバイル対応: ネイティブプラットフォーム(iOS、Android、Windows 8など)で作業を開始したときは、トークンベースのアプローチを使用すると、クッキーが非常に簡単になります。

  • CSRF: あなたはクッキーに頼っていないので、クロスサイトリクエストから保護する必要はありません(例えば、あなたのサイトを同胞にし、POSTリクエストを生成し、そして存在しないため、既存の認証Cookieを再利用します。

  • パフォーマンス: ここではハードパフォーマンスベンチマークを提示していませんが、ネットワークラウンドトリップ(データベースでセッションを見つけるなど)は、トークンを検証してその内容を解析するためのHMACSHA256の計算よりも時間がかかります。

161
Asik

tokenは、Server Xのみが作成した可能性があり、特定のユーザーを識別するのに十分なデータを含むデータです。

あなたはあなたのログイン情報を提示して、Server Xtokenを要求するかもしれません。それからtokenを提示し、Server Xにユーザー固有のアクションを実行するよう依頼します。

Tokensは、暗号化の分野からのさまざまな技術のさまざまな組み合わせを使用して作成されているだけでなく、より広範なセキュリティ研究の分野からの入力も含まれています。あなたが行ってあなた自身のtokenシステムを作成することに決めたなら、あなたは本当に賢いのが一番でした。

90
yfeldblum

トークンはサーバーによって作成されたデータの一部であり、特定のユーザーを識別するための情報とトークンの有効性が含まれています。トークンには、ユーザー名とパスワードを直接渡すのではなく、ユーザーの情報、および認証をサポートするすべての方法でユーザーがサーバーに渡すことができる特別なトークンコードが含まれます。

トークンベースの認証は、サーバーから提供されたセキュリティトークンを使用して、サーバー、ネットワーク、またはその他の安全なシステムにログインしようとするユーザーを認証するセキュリティ技術です。

ユーザーがセキュリティトークンを渡すことによって自分が有効なユーザーであることをサーバーに証明できれば、認証は成功です。サービスはセキュリティトークンを検証し、ユーザーの要求を処理します。

トークンがサービスによって検証された後、クライアントのセキュリティコンテキストを確立するために使用されるため、サービスは連続したユーザー要求に対して承認の決定または監査アクティビティを行うことができます。

情報源にアクセスしてください

40
DeepakK

トークンベース(セキュリティ/認証)

つまり、アクセスできることを証明するには、まずトークンを受け取る必要があります。実際のシナリオでは、トークンは建物へのアクセスカードになることがありますが、それはあなたの家への鍵となる鍵となることがあります。あなたがあなたのオフィスのための鍵カードまたはあなたの家への鍵を引き出すために、あなたは最初にあなたが誰であるかを証明する必要があり、そしてあなたは実際にそのトークンへのアクセスを持っている。誰かにあなたのIDを見せたり、彼らに秘密のパスワードを与えたりするのと同じくらい簡単なものかもしれません。だから私は私のオフィスにアクセスする必要があると想像してください。私は警備室に行き、私は彼らに私の身分証明書を見せ、そして彼らは私にこのトークンを与え、それが私を建物の中へと導きます。今、私は自分と自分のトークンを持っている限り、建物内でやりたいことは何でもするための無制限のアクセス権を持っています。

トークンベースのセキュリティの利点は何ですか?

安全でないAPIについて考えてみると、その場合にしなければならなかったのは、やりたいことすべてにパスワードを提供しなければならなかったことです。

想像してください 私達が私達のオフィスのドアに入るたびに、私達は私達のパスワードのドアの隣に座っている人全員に与えなければなりません。これは、私たちのオフィス内の誰かが私たちのパスワードを受け取って偽装する可能性があることを意味するので、これはかなり悪いことです。それはかなり悪いことです。代わりに、私たちがすることは、もちろんパスワードとともにトークンを取得することですが、私たちはそれを一人の人物から取得します。そして、建物の中のどこにでもこのトークンを使うことができます。もちろん、トークンを紛失しても、他の誰かがパスワードを知っているのと同じ問題がありますが、トークンを紛失した場合にアクセスを取り消すことができるのか、トークンを失効させるには24時間以上住んではいけないので、翌日オフィスに来たときは、もう一度IDを表示する必要があります。それでも、IDを提示するのは1人だけです。それは、セキュリティ担当者がトークンを取得する場所に座っていることです。

20
Ahmer Ali Ahsan

問題は古く、技術は進歩しています。現在の状態は次のとおりです。

JSON Web Token(JWT)は、Webアプリケーション環境でパーティー間でクレームを受け渡すためのJSONベースのオープンスタンダード(RFC 7519)です。トークンは、コンパクトでURLセーフで、特にWebブラウザのシングルサインオン(SSO)のコンテキストで使用できるように設計されています。

https://en.wikipedia.org/wiki/JSON_Web_Token

14
Ray Hulha

データベース内のユーザーに関連付けられているハッシュ値などです。そのトークンを使用して、アプリケーションの他の関連コンテンツにアクセスすることをユーザーに許可することができます。クライアント側でこのトークンを取得するにはログインが必要です。初回ログイン後は、session、session idなどの他のデータではなく、取得したトークンを保存する必要があります。これは、すべてがアプリケーションの他のリソースにアクセスするためのトークンだからです。

トークンは、ユーザーの信憑性を保証するために使用されます。

3
Hardik Patel

Web APIリソースをセキュリティで保護するための最近の最も好ましいアプローチは、それぞれがすべてのリクエスト。これは、トークンベースの認証アプローチと呼ばれます。

トークンベースの認証は次のように機能します。

ユーザーは、名前とパスワードをクライアントに入力します(クライアントとは、ブラウザーまたはモバイルデバイスなどを意味します)。

クライアントは、これらの資格情報(つまり、ユーザー名とパスワード)を承認サーバーに送信します。

次に、承認サーバーはクライアントの資格情報(ユーザー名とパスワード)を認証し、アクセストークンを生成して返します。このアクセストークンには、ユーザーを識別するのに十分な情報が含まれ、トークンの有効期限も含まれています。

クライアントアプリケーションは、HTTPリクエストのAuthorizationヘッダーにアクセストークンを含めて、トークンの有効期限が切れるまで、リソースサーバーから制限されたリソースにアクセスします。

次の記事では、WEB APIでトークンベース認証を実装する方法をステップごとに示します。

https://dotnettutorials.net/lesson/token-based-authentication-web-api/

1
Pranaya Rout

新しいWebサイトに登録すると、アカウントをアクティブにするための電子メールが頻繁に送信されます。そのEメールには通常、クリックするためのリンクが含まれています。そのリンクの一部にはトークンが含まれており、サーバーはこのトークンについて知っており、それをあなたのアカウントに関連付けることができます。トークンには通常有効期限が関連付けられているため、リンクをクリックしてアカウントをアクティブにするのに必要な時間は1時間だけです。顧客が電子メールをチェックするために使用しているデバイスまたはブラウザが不明なため、これはクッキーまたはセッション変数では不可能です。

0
user3094826