OAuth対JWT(JSONウェブトークン):徹底的比較


認証は、インターネット上のアプリケーションのコア機能の一つです.しかし、実際に認証を実装するにはいくつかの標準とプロトコルを理解する必要があります.
これらの認証標準の中で最も重要なのはOAuthとJWT(JSONウェブトークン)です.
OAuthとJWTの意味を探すこと?あなたは正しい場所にいる.この記事では以下を説明します.
  • Oauthが何であるか、そして、それを使用する賛否両論
  • JWT(JSONウェブトークン)は何であり、長所と短所
  • 効果的にOAuthとJWTを一緒に使う方法
  • 飛び込みましょう!

    OAuthとは


    OAuth(Open Authorization)-多くの場合、最新バージョンOAuth 2.0として書かれています-認証サーバーを介してユーザーを認証するために使用されるプロトコルです.
    OAuthについての有用なことの一つは、資格情報を共有することなく安全な方法でアカウントアクセスをデリゲートすることを可能にすることです.資格情報の代わりに、OAuthはアクセストークンに依存します.
    アクセストークンを使用して、クライアントアプリケーションは自分自身を認証したユーザーの身元を確認できます.
    視覚的に、プロセスは次のようになります.

    ときに“Googleで”または“Gigthubとのサイン”を実装すると、OAuth 2.0プロトコルを使用して実装する!

    OAuth使用の賛否


    OAuthとの作業にはいくつかの大きな利点があります.
  • それは受け入れられた業界標準です.これは、ほとんどの認証サービスがOAuth 2.0を理解し、使用することを意味します.
  • 多くのプラグアンドプレイOAuthオプションがあります.「Googleとのサインイン」や「Facebookとのサインイン」などのサービスを含め、すでにアプリケーション内で消費されるよう設定されています.
  • OAuthはほぼすべての言語やWebフレームワークでクライアントライブラリをテストしています.これは、選択のあなたの言語がOAuthで使用できることを意味します.
  • コードのデカップリングを可能にします.クライアントアプリケーションコードは認証コードの影響を受けません.
  • OAuthは非常に安全で、テストされた戦いです.その広範な性質のため、すべてのセキュリティエッジのケースは、業界の専門家によって考えられていることを安心することができます.
  • OAuth使用の可能性に関する考察


    OAuthは偉大な標準ですが、それを使うときに留意すべきことがたくさんあります.
  • OAuthは、あなたがなじみがないならば、理解するために複雑でありえます.いくつかの異なるOAuthフローがあり、あなたが挑戦することができますが正しいかを決定する.場合によっては、複数のフローを使用する必要があります.
  • それは下端のユーザーのプライバシーを持っています.Authサーバーはエンドユーザーがログインしているすべてのサイトを知っています.たとえば、サイトがGoogleとのサインインを使用するとき、Googleはそのサイトのユーザーが署名しているか、活発であるとき、追跡することができます.
  • それは特定の状況でoverkillです.あなたが1つのフロントエンドとバックエンドを持っている単純なウェブアプリを構築しているならば、あなたはOAuthプロトコルを必要としません.しかし、多くのオンラインチュートリアルと準備されたAuth解決は、あなたにこれを実行させます.
  • セッション管理ソリューションはありません.ユーザーが認証されると、Auth Serverは単にあなたのアプリケーションによって消費されるJWTを返すだけです.しかし、その後、OAuthプロトコルは、アプリケーションのフロントエンドとバックエンドの間で認証されたセッションを維持する方法を指定するためのサポートを提供しません.
  • JWTとは何ですか?


    JWTは認証サーバによって生成され、エンドユーザの情報を含んでいるトークンです.情報はJSON形式であり、効率的にクライアントアプリケーションで暗号を使用して検証することができます.

    それで、正確にJWTを使うとき、適当ですか?


    JWTは、クライアントがペイロード自体に含まれている情報を確認できるような方法で、信頼されていないクライアントに何らかの情報を送信したい場合に使用されます.
    Authサーバーのコンテキストから、信頼されていないクライアントは、ユーザーが使用しようとしているアプリケーションです.アプリケーションのバックエンドのコンテキストから、信頼されていないクライアントがフロントエンドコードです.

    JWTを使用する


    JWTはこのような人気のある標準です.
  • 彼らは自己完結しています.JWTはユーザーの詳細を含めることができます.したがって、各リクエストの情報については、データベース/Authサーバーを照会する必要はありません.
  • 彼らは強力なセキュリティ保証を提供します.JWTSは、クライアントまたは攻撃者によって変更されることからそれらを保護するデジタル署名されます.
  • JWTSはクライアントにのみ格納されます.サーバー上でJWTSを生成し、クライアントに送信します.クライアントはすべてのリクエストをJWTに送信します.これは、データベーススペースを節約できます.
  • は、効率的で、確認するのが速いです.これは、JWTSがデータベースの検索を必要としないためです.
  • JWTを用いた潜在的考察


    JWTSは非常に便利ですが、以下のことを念頭に置いておくのが役に立ちます.
  • あなたは余分なエンジニアリングの努力の多くを入れずにそれらを取り消すことはできません.これはDBの呼び出しが検証されていないためです.即時の取消しを実施するために、あなたは時間がかかることがありえるimplement JWT blacklistingに必要であるでしょう.
  • 安全な1つの秘密を維持しながらセキュリティボトルネックを作成するのは簡単です.署名キーが侵害された場合、攻撃者は自分の有効なJWTSを作成するためにそれを使用できます.これにより、任意のユーザのアプリケーションを識別できます.
  • よりよく一緒に:OAuthとJWTを一緒に使う方法


    OAuthとJWTはアプリケーションの認証フローを構築するための強力な標準であることを学びました.それが判明するように- OAuth対JWTのいずれかまたは-彼らは一緒に使用することができない必要はありません!
    認証サーバがユーザの資格情報(OAuthを通して)を首尾よく検証するとき、それはクライアントアプリケーションにユーザ詳細を伝える必要もあります.クライアントアプリケーションが詳細を確認するためには、JWTSを使用して効率的なプロセスを確認できます.
    これはOAuthサーバがクライアントのJOTを送信する(OAuthフローが完了した後)エンドユーザーの情報を含んでいます.
    OAuthサーバが送信するJWTのJSONペイロードは、以下のようになります( Googleとのサインインの例).
    {
        "iss": "https://accounts.google.com",
        "azp": "1234987819200.apps.googleusercontent.com",
        "aud": "1234987819200.apps.googleusercontent.com",
        "sub": "10769150350006150715113082367",
        "at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
        "email": "[email protected]",
        "email_verified": "true",
        "iat": 1353601026,
        "exp": 1353604926,
        "nonce": "0394852-3190485-2490358",
        "hd": "example.com",
    }
    
    これらのすべてのフィールドは何を意味しますか?以下は、この特定の例を使用した簡単な概要です.
    ISS :トークンの発行者(この場合Google)
    AZPとAUD:あなたのアプリケーションのためのGoogleによって発行されたクライアントID.このように、Googleはどのウェブサイトがそのサインインサービスを使おうとしているかを知っています、そして、ウェブサイトはJWTが彼らのために特に発行されたということを知っています.
    サブユーザのGoogleユーザーID
    アクセストークンのハッシュ.OAuthアクセストークンは、それが不透明なトークンであるという意味でJWTと異なっています.アクセストークンの目的は、クライアントアプリケーションが署名したユーザーに関する詳細な情報を尋ねるためにGoogleを問い合わせることができるようにすることです.
    電子メール:エンドユーザーの電子メールのID
    電子メールを検証:かどうかをユーザーが自分のメールを確認しています.
    IAT :時間(エポック以降のミリ秒単位)でJWTが作成されました
    EPP :時間(エポック以来ミリ秒単位)でJWTが作成されました
    Nonce :リプレイ攻撃を防ぐためにクライアントアプリケーションで使用できます.
    ユーザーのホストされたGスイートドメイン
    ご覧のように、OAuthサーバー(この場合はGoogle)、クライアントアプリケーションに送信された多くの情報があります!上記のJSONペイロードの分野のいくつかがGoogle(HDのような)に特有であることに言及する価値があります.他のプロバイダは、同様のコンテンツを持っている可能性があります.
    これがJWTのすべてであるので、クライアントアプリケーションはこのJSONの内容を確認することができて、誰もこの内容を操作しなかったということを知っていることができます.

    最後の思考


    私たちは、開発者が彼らの認証セットアップのために「OAuthまたはJWT」を使うべきかどうか尋ねます.実際には、OAuthとJWTは2つの異なる標準です.そして、それが大きな影響とともに使われることができる異なる使用で.実際、JWTはしばしばOAuthプロトコルの一部として使用されます.
    SuperTokensで、OAuthとJWTを使用しているほとんどのマシンを緩和するAuthソリューションを提供します.
  • 我々はOAuth only when really needed.
  • の使用を奨励する
  • は、検証効率を低下させることなく、revoke JWTs / access tokens easilyへの道を提供します.
  • 我々はOAuthプロトコルで欠落しているsecure session management solutionを提供します.
  • 認証、OAuthまたはJWTの詳細については?または任意の質問をしてください私たちの不協和サーバに参加してくださいhere