デジタルアプリが市場で成功するためには、ユーザーの期待に応え、優れた機能、良好な市場認知、信頼できるプロセス、ユーザーデータやセッションの安全性、そして継続的な改善が欠かせません。
SaaS製品でコードが重要であれば、認証がその基盤となります。適切な認証対策がなければ、開発の努力が無駄となり、アプリがハッカーなどの攻撃対象になりかねません。
ウェブでの認証やユーザー権限の確認に関しては、OAuthおよびJWTといったプロトコルが思い浮かびます。これらについて詳しくない場合、以下で説明します。
どちらもウェブやアプリの認証分野で最も知られているプロトコルですが、同一なのでしょうか?どちらが優れているか、どの場面で用いるべきかといった疑問に対する回答を、以下に示します。
サーバーで生成されるトークンであり、エンドユーザーに関する基本情報(主にメールID、ユーザーID、パスワード、ログイン情報など)を含みます。
名前の通り、トークンの情報はすべてJSON形式で保存されます。JWTの情報はクライアント側で扱いやすく、暗号技術も効果的に活用されています。
JWTは、いくつかの明確なメリットがあるため、他の認証方法より選ばれることが多いです。
有望なメリットにもかかわらず、JWTにはいくつかの欠点も存在する点を見逃してはなりません。
JWTは、部分的な情報を未検証のクライアントへ伝達する環境や、ペイロードでクライアント側の情報検証が求められる場合に最も効果を発揮します。APIやサーバー間の認証が必要なケースに適した選択肢です。
JWTは機微なユーザー情報を含むため、その保存方法は十分に整え安全に行う必要があります。保管場所としてはエンドユーザーのブラウザ内の安全な場所、一般的にはhttpOnly cookieが推奨され、local storageやsession storageでの保存は避けるべきです。
サイバー世界におけるAPI利用の拡大とともに、その認証手法への関心も高まっています。JWTはこの用途において有効なツールであり、Googleも採用しているAPIアクセス制御機構は広く知られています。この仕組みについて理解することが重要です。
APIが設定されると、クライアントでトークンを生成できる秘密鍵が提供され、APIリクエスト時にこのトークンが付与されることで、特定のクライアントを識別するのに役立ちます。
JWTに関する十分な理解が得られたところで、次にOAuthの基本、各バージョン、進化の過程について説明します。
一度は耳にしたことがある有名なプロトコルです。安全なユーザー認証を実現するために用いられ、APIやサービスと混同されることはありません。OAuthは世界的に認知される標準規格で、HTTPS上で機能し、サーバー、API、デバイス、アクセストークンを利用するアプリと非常に相性がよいです。
OAuthを利用すると、アプリはクライアントアプリに対して安全かつ制御されたアクセス権を付与する方法を決定でき、Java、ウェブ、モバイル、ブラウザアプリの開発で広く利用されます。
OAuth 2.0は、プロトコルとしてもフレームワークとしても機能する最新バージョンです。初期のOAuthの問題点を解消し、相互運用性を向上させたことで人気が急上昇し、TwitterやFacebookなどの有名なアプリで利用されています。
主な目的は、ユーザーデータやAPIなどの特定リソースへのアクセスを制御することです。
グラントを提供するということは、ユーザーの要求に応じて特定または複数のリソースへのアクセスを許可することを意味します。OAuthは、ユーザーが情報へアクセス、制御、利用する権限を与える方法を5通り提供します。
以下に、ユーザーがトークンを取得(またはその取得を要求)する際の主要な5つのグラントタイプを示します。
OAuth(またはOAuth 2.0)はトークンがすべてです。そのため、トークンの意味を正しく理解することが重要です。OAuthでは2種類のトークンが存在します。
アクセストークンはクライアントからリクエストヘッダーまたはパラメーターとして送られ、第三者アプリがリソースサーバー上のユーザーデータへアクセスすることを許可します。トークンの有効期限機能により、クライアント側で第三者リソースの利用制限を設定でき、そのスコープの定義が重要です。
次にリフレッシュトークンがあります。これはアクセストークンと併せて発行されるものの、クライアントからのリクエストの一部ではなく、主に期限切れのトークンを更新する役割を担います。
このプロトコルは多くの理由で広く利用されています。その理由を知るため、以下のメリットを確認してください:
OAuthには欠点がないと期待されがちですが、実際にはいくつかの課題があります。以下に主要な課題を示します:
どちらもシステムやネットワークにアクセスする際のユーザーの信用性を確認するプロセスの一部です。両者を組み合わせて利用できるかについて、次に検証します。
別の記事比較もご覧ください - OAuthとSAML、OpenIDの違い
JWTとOAuthを詳しく検証すると、どちらか一方だけでは不十分な場合があることが理解できます。実際、両者を組み合わせることでより強固な認証が実現でき、互いに補完し合い安全なデータ伝送に寄与します。
両者が併用可能な主な理由は、事前に形式が定められていないため、OAuth2にJWTの導入の余地があるからです。
また、OAuth2認証サーバーがクライアントに返すaccess_tokenに、追加のペイロード情報を含むJWTが含まれる可能性もあります。
その場合、同じ情報の取得回数が減り、サーバーのパフォーマンス向上および長期的な運用コストの削減につながります。
さらに、OAuth2に2種類のトークンを発行させる方法もあります。最初のトークンはaccess_token、次に追加の識別情報を含むJWTトークンです。この方法を採用する際は、OpenID Connectを利用していることを確認してください。OpenID ConnectはOAuth2の拡張であり、さらなる標準化を提供します。
JWTとOAuthは、それぞれ独自のメリットを持つAPIの安全確保方法です。JWTは軽量で自己完結型のトークンが求められる、スケーラブルかつステートレスなシステム構築に適しており、一方OAuthは第三者サービスに対して制限付きでユーザーデータを提供するケースに向いています。
ただし、どちらか一方を選ぶ必要はなく、両技術を組み合わせることでそれぞれの強みを活かすことが可能です。その方法は以下の通りです:
OAuthとJWTの統合により、両技術の強みを活かした堅牢かつ効率的でスケーラブルなアクセス管理ソリューションが実現されます。
強固な認証は重要ですが、それだけでは十分なセキュリティ対策とはなりません。貴社のAPI全体を守るためには、API保護とWebアプリのセキュリティを統合したプラットフォームが必要です。Wallarmはそのソリューションを提供します。デモを予約して、Wallarmが貴社のWebおよびAPI資産をいかに守るかを確認してみてください。
OAuth - Official website
JSON Web Tokens - Official website
最新情報を購読