私はいくつかの用語とメカニズムを理解し、それらが互いにどのように関連しているか、またはどのように重複しているかを調べようとしています。理論上のWebアプリケーションとモバイルアプリケーションの認証が焦点です。 焦点は、トークンベースの認証とCookieベースの認証の正確な違いと、それらが交差するかどうか/どのように交差するかにあります。
http基本/ダイジェストおよびoauth/aws authのような複雑なシステムは私に興味を示しません
いくつかのアサーションがあります。アサーションを出して、それらが正しいかどうかを確認したいと思います。
私はマークから遠すぎず、どんな助けにも感謝しています!
Session-based Authenticationでは、サーバーは負荷の高いサーバー側をすべて実行します。大まかに言えば、クライアントはその資格情報で認証し、session_id
(Cookieに保存できます)を使用して、これを後続のすべての発信要求に添付します。したがって、これは資格情報のセットに相当するため、「トークン」と見なすことができます。ただし、これについて特別なことは何もありませんsession_id
ストリング。これは単なる識別子であり、サーバーは他のすべてを行います。ステートフルです。識別子をユーザーアカウントに関連付けます(たとえば、メモリ内またはデータベース内)。このセッションを特定の操作または特定の期間に制限または制限し、セキュリティ上の懸念がある場合はセッションを無効にすることができます。さらに重要なことは、これらすべてをオンザフライで実行および変更できることです。さらに、それはウェブサイト上のユーザーのあらゆる動きを記録することができます。考えられる欠点は、拡張性が低いこと(特に複数のサーバーファームで)とメモリ使用量が多いことです。
Token-based Authenticationでは、セッションはサーバー側に保持されません(ステートレス)。最初の手順は同じです。資格情報はトークンと交換され、トークンはその後のすべてのリクエストに添付されます(Cookieに保存することもできます)。ただし、メモリ使用量、簡単な拡張性、および全体的な柔軟性(トークンは別のクライアントと交換できます)を減らすために、必要なすべての情報を含む文字列(トークン)が発行されます。サーバ。トークンを使用/作成する方法はいくつかあります。
ハッシュメカニズムの使用。 HMAC-SHA1
token = user_id|expiry_date|HMAC(user_id|expiry_date, k)
どこ user_id
およびexpiry_date
は、結果のハッシュが添付されたプレーンテキストで送信されます(k
はサーバーだけに認識されます)。
対称的にトークンを暗号化するAESを使って
token = AES(user_id|expiry_date, x)
ここで、x
は暗号化/復号化キーを表します。
それを非対称に暗号化します。 RSA
token = RSA(user_id|expiry_date, private key)
生産システムは、通常、これらの2つのアーキタイプよりも複雑です。たとえば、Amazonはそのウェブサイトで両方のメカニズムを使用しています。また、ハイブリッドを使用して、2で説明したようにトークンを発行し、ユーザーセッションをトークンに関連付けて、ユーザーの追跡や失効を可能にし、クラシックトークンのクライアントの柔軟性を維持することもできます。また、OAuth 2.0は、たとえばベアラトークンを取得するために、存続期間の短い特定のベアラトークンと長寿命のリフレッシュトークンを使用します。
出典:
HTTPはステートレスであり、認証された状態にするためには、ユーザーに関する情報を参照するために使用されるある種のトークンが必要です。このセッションIDは通常、Cookie値として送信されるランダムトークンの形式です。 OAuth Access Token は、ユーザー、およびユーザーがアクセスできるリソースのscope
を識別するために使用されます。 OAuthシングルサインオンを使用するアプリケーションでは、通常、OAuthアクセストークンがセッションIDと交換され、さまざまなユーザー状態を追跡できます。
攻撃者の観点から見ると、セッションID、またはOAuthアクセストークンのハイジャックは、ユーザー名とパスワードと同じくらい優れており、場合によってはそれよりも優れています。 セッションIDにはセキュリティプロパティが必要です ユーザーアカウントを侵害から保護します。
開発者の観点から、ホイールを再発明しないでください。プラットフォームが提供するセッションマネージャを使用し、 OWASPセッション管理ガイドライン に準拠するように構成されていることを確認します。
したがって、セッションベースの認証で、必要なリソースへのアクセスのセキュリティを強化するには: