トークンベースの認証とは何ですか?


515

トークンベースの認証の意味を知りたい。インターネットを検索しましたが、理解できるものが見つかりませんでした。


17
私は多くの説明を読みましたが、それらはすべて具体的な詳細については軽く見えました。この記事はついに私を助けてくれました:scotch.io/tutorials/the-anatomy-of-a-json-web-token
Chris Conover

回答:


543

私はそれはここで十分に説明されていると思います -長い記事の重要な文章だけを引用します:

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

言い換えると、認証に1レベルの間接参照を追加します-保護されたリソースごとにユーザー名とパスワードで認証する代わりに、ユーザーはその方法で(限られた期間のセッション内で)1回認証し、代わりに時間制限のトークンを取得します、そのトークンをセッション中のさらなる認証に使用します。

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

それでも不明な点がある場合は、質問を編集して、何が100%明確ではないかを明確にしてください。さらにお手伝いできると確信しています。


6
Webアプリケーションでは、リモートWebサイトからの1つ(または複数)のCookieがトークンの機能を実行すると私は思っていますか?
AJP

29
トークンはCookieとして保存されるので、そのCookie /トークンを盗んでそれ自体を使用し、サーバーをだまして許可されたユーザーであると誤解させるのを防ぐための何かがありますか?明らかに、彼らはx時間だけそれを使用することができましたが、その期間中、彼らは必要なすべてのダメージを与えることができました。
BenM 2013年

40
これは、ユーザーが自分のユーザー名とパスワードを入力してsession_idを取得し、その後のリクエストでこのsession_idを使用するSessionAuthenticationとどう違うのですか?
Saurabh Verma 2014

4
トークンの有効期限が切れた場合、ユーザーは新しいトークンを取得するために再度ログインする必要がありますか?
Anthony

12
@SaurabhVerma Cookieに情報を保存する必要がないため、セッションとは異なります。これはモバイルデバイスに最適です。一部のデバイスではCookieの使用が制限されています。
ケブマン2015

182

Auth0.comから

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

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

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

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

  • CDN:アプリのすべてのアセットをCDNから提供できます(javascript、HTML、画像など)。サーバー側は単なるAPIです。

  • 分離:特定の認証スキームに縛られることはありません。トークンはどこでも生成される可能性があるため、これらの呼び出しを認証する単一の方法で、どこからでもAPIを呼び出すことができます。

  • モバイル対応:ネイティブプラットフォーム(iOS、Android、Windows 8など)で作業を開始するとき、トークンベースのアプローチを使用すると、Cookieは理想的ではなくなり、これにより大幅に簡素化されます。

  • CSRF: Cookieに依存していないため、クロスサイトリクエストから保護する必要はありません(たとえば、サイトを同胞化し、POSTリクエストを生成して、既存の認証Cookieを再利用することはできません。 )。

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


6
@Asikここでのすべてのポイントは、トークンの失効、ブラックリスト、返信攻撃防止などの処理を開始したときの「ステートレス」を除いて有効です
svlada

引用されたサイトは同じトピックに関する新しい記事を推奨しています:auth0.com/blog/cookies-vs-tokens-definitive-guide
ASalazar

2
あなたは、「セッションのためにJWTを使用停止」を参照することもできます。cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
ユライMartinka

1
Asik、トークンの有効性はどうですか、いつトークンが期限切れになるのですか?あなたがそれらの情報を追加すればそれは良いでしょう。
アルンプラカーシュ2017年

2
リンクが壊れています。
楕円図

95

A tokenServer X作成された可能性のあるデータであり、特定のユーザーを識別するのに十分なデータが含まれています。

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

Tokensは、暗号化の分野からのさまざまな手法のさまざまな組み合わせを使用して作成されるほか、より幅広いセキュリティ研究の分野からの入力を使用して作成されます。あなたが行って独自のtokenシステムを作成することを決定した場合、あなたは本当に賢いのが一番でした。


4
一般に、トークンベースの認証が必要な場合は、OAuthから始める必要があります。
ボブ・アマン

6
OAuthは確かにWebベースのアプリケーションで実行可能です。ただし、たとえば、オペレーティングシステムのログインセッションでは、他の多くの種類のソフトウェアプログラムと同様にトークンシステムも使用されるため、このアイデアはWebに限定されません。
yfeldblum 09/10/20

1
トークンはおそらく、非公開のカスタマーサポートシステムにも適しています。会社はユーザー名/パスワードを管理し、トークンを発行および管理します。
KevinManx 2014年

chrs-しかし、このシステムはセッションベースのシステムとどう違うのですか?
BKSpurgeon 2018

@BKSpurgeon-トークンは、認証されたセッションを実装する一般的な方法です。
yfeldblum 2018

40

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

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

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

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

ソースをご覧ください


22

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

つまり、アクセスしたことを証明するには、まずトークンを受け取る必要があります。実際のシナリオでは、トークンは建物へのアクセスカードである可能性があり、それはあなたの家の鍵の鍵となる可能性があります。オフィスの鍵カードまたは自宅の鍵を取得するには、まず本人であること、および実際にそのトークンにアクセスできることを証明する必要があります。それは、誰かにあなたのIDを見せたり、秘密のパスワードを与えたりするような単純なものかもしれません。それで、オフィスにアクセスする必要があると想像してください。私はセキュリティオフィスに行き、IDを提示すると、このトークンが渡され、建物に入ることができます。これで、トークンを所持している限り、建物内でやりたいことを無制限に行うことができます。

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

安全でないAPIを思い返すと、その場合に実行しなければならないことは、実行したいすべてのことに対してパスワードを提供しなければならないことでした。

想像してみてオフィスのドアに入るたびに、ドアの隣に座っている全員にパスワードを提供する必要があります。これはかなり悪いことです。つまり、オフィス内の誰もがパスワードを盗んで私たちになりすますことができるということです。それはかなり悪いことです。代わりに、もちろんパスワードとともにトークンを取得しますが、1人から取得します。そして、建物内のどこにでもこのトークンを使用できます。もちろん、トークンを紛失した場合、他の誰かがパスワードを知っている場合と同じ問題が発生しますが、それにより、トークンを紛失した場合にアクセスを取り消すことができるようにする方法や、おそらくトークン24時間を超えて生きるべきではないので、オフィスに来た次の日、IDを再度提示する必要があります。しかし、それでも、IDを示す人は1人だけです。


15

質問は古く、技術は進歩しています、これが現在の状態です:

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

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


1
JWTがトークンベースの認証を実装するためのテクノロジーの現在の状態を表すとは思いません。それはそれを実装する方法の1つにすぎず、cryto.net /〜joepie91 / blog / 2016/06/13 / stop
Sung Cho

3

これは、データベースまたは他の方法でユーザーに関連付けられているハッシュです。そのトークンを使用して、アプリケーションの認証に関連するコンテンツへのユーザーアクセスを認証および承認できます。クライアント側でこのトークンを取得するには、ログインが必要です。初回ログイン後、セッション、セッションIDなどのデータではなく、取得したトークンを保存する必要があります。これは、アプリケーションの他のリソースにアクセスするためのトークンであるためです。

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


3

Web APIリソースを保護するための現在最も推奨されるアプローチは、署名されたトークン(特定のユーザーを識別するのに十分な情報を含む)を使用してWeb APIサーバーでユーザーを認証することです。すべての要求。これはトークンベースの認証アプローチと呼ばれます。

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

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

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

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

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

次の記事は、WEB APIにトークンベースの認証を実装する方法を段階的に示しています。

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


-2

新しいウェブサイトに登録すると、多くの場合、アカウントをアクティブにするための電子メールが送信されます。そのメールには通常、クリックするリンクが含まれています。そのリンクの一部であり、トークンが含まれています。サーバーはこのトークンを認識しており、それをアカウントに関連付けることができます。トークンには通常、有効期限が関連付けられているため、リンクをクリックしてアカウントをアクティブ化するのに1時間しかかかりません。Cookieまたはセッション変数では、これは不可能です。これは、顧客が電子メールのチェックに使用しているデバイスまたはブラウザーが不明であるためです。


11
ワンタイムトークン/リンクは、トークンベースの認証とは異なる概念です。
エミールベルジェロン2017

あなたが言うことの名前もトークンです。しかし、それは問題ではありません
sajjad Yosefi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.