RESTful Apiアイデンティティ認証の概要


RESTful APIはHTTPプロトコルに基づくAPI(ApplicationProgramming Interface)であり、その核心はすべてのAPIを1つのネットワークリソースとして理解することであり、クライアントがリソースを要求する際に動作するのはリソースの記述であり、リソース自体ではなく、各リクエストにはサーバにこのメッセージをどのように処理するかを知らせ、すべてのクライアントとサーバの状態をHTTPリクエストのMethodに移行させるのに十分な情報を含まなければならない.Url固有のリソースに対応する機能を備えています.
RESTful ApiはHTTPプロトコルに基づくAPIであり、無状態伝送であるため、サーバがクライアントの状態を保存しないことを意味し、毎回の呼び出しは前回の呼び出し要求とは全く無関係であり、現在のクラウドコンピューティングメーカーでは広くSaaS(Software-as-a-service)プラットフォームを構築し、クラウドコンピューティングとモバイルアプリケーションを結合し、いつでもソフトウェアサービスを提供し、使用することができる.外部ユーザに対して一定の開放的なRESTful APIを暴露することによってインタラクションを実現するため、現在、RESTful API通信に対する攻撃手段もますます多くなり、例えば仲介者の攻撃方式を通じてシステムに重大な安全上の危険をもたらす.そのため、RESTfulアーキテクチャのwebシステムは、APIインタフェース呼び出しにセキュリティ保護を行い、API再生攻撃を防止する必要があるため、アイデンティティ認証はRESTful APIの重要な問題である.
現在一般的なアイデンティティ認証方法は以下のとおりです.
1)HTTP Basic Authentication(HTTP基本認証):このような方式が必要なURLにアクセスする場合、通常、BASE 64符号化されたユーザ名とパスワード文字列を認証情報として要求ヘッダに追加するか、urlにBASE 64符号化されたユーザ名とパスワード文字列を直接追加する必要があり、サーバが要求パケットを受信するとユーザ名パスワードが復号化され、正確性が検証される.認証に成功すると認証情報はセッションに保存され、セッションの有効期間内に認証は不要になります.検証に失敗した場合、サーバはクライアントに「401 Unauthorized」ステータスコードを返します.
2)HTTP Digest Authentication(HTTP要約認証):この方式はHTTP Basic Authenticationの改良バージョンであり、パスワードの伝送の代わりに要約を採用し、MD 5のような不可逆ハッシュアルゴリズムを用いてパスワードを暗号化する.再生攻撃を防止するために、クライアントが最初に要求したとき、サービス側で生成した乱数をWWW-Authenticate応答ヘアに置いてクライアントに送り返し、要約を計算するたびにこの乱数を要約に添付します.サーバは要約を取得した後,クライアントのID情報に基づいてデータベースからクライアントパスワードを取り出して同様の計算を行った要約を比較し,マッチングすると認証が通過する.
3)Access Token(アクセストークン):クライアントのログインが完了すると、サービス側は時効性のあるtokenを生成してクライアントに返し、その後、クライアントに要求するたびにtokenを持参し、URLパラメータとして送信する必要がある.http://demo.com/users?access-token=xxxxx」は、サービス側がアイデンティティを制御し、tokenが期限切れになると、サービス側はtokenを破棄し、クライアントはtokenの取得を再要求する必要があります.
4)OAuth(オープンライセンス):OAuthプロトコルはライセンスのオープンネットワーク標準であり、現在のバージョンは2.0である.OAuthは、クライアントとサーバとの間に認証サーバを設定することにより、クライアントがサーバリソースを要求すると、サーバはクライアント要求を認証サーバにリダイレクトし、クライアントは認証サーバにログインして認証されたTokenを取得し、HTTP Bearer Tokensを介してリソースサーバに送信して認証を完了する.現在のOAuth 2.0バージョンではhttpsプロトコルに基づいて、httpsプロトコルの強制使用が要求されています.

よく使われるいくつかの概念:


攻撃のリプレイ:
攻撃者は一連の方法で認証証明書を盗み、ユーザーを真似てサーバーをだます目的を達成した.
タイムスタンプ:
ある瞬間を一意に識別するために使用できます.クライアントとサーバ間の転送時間の消費量を検証するために使用できます.クライアントが開始したリクエストにタイムスタンプが付いている場合、サービス側は受信後に受信時間と送信時間の差が60 sあることを発見し、リクエストを拒否することができる.タイムスタンプにはタイムゾーン性がないため、クライアントとサーバ間のタイムゾーンの不一致を考慮する必要はありません.
署名:
ハッシュアルゴリズムを使用して、ユーザ要求中のいくつかのパラメータによって生成された不可逆暗号文を暗号化し、サービス側は署名を受信した後、同じプロセスで署名を生成して認証する.署名プロセス種は、ランダム数、タイムスタンプによって署名の使い捨てを保証することができる.
sign = BASE64(MD5(privatekey, HttpMethod, nonce, URIPath, parameters)));