2016-06-13 8 views
0

私は現在の顧客ベースを持っています。私は、RESTfulなサービス(アプリを通じて)を介して、自分自身に関する特定の詳細にアクセスできるようにしたいと考えています。RESTfulサービスのユーザー認証

私は顧客にできるだけ煩わしさを感じさせないようにしたいので、各顧客のUUIDを生成し、UUIDをIDとして提供してRESTにアクセスさせることを考えています。

たとえば、http://www.example.org/rest/value/UUIDまたはhttp://www.example.org/rest/valueで、TLSでのHTTP基本認証としてのUUIDを使用します。

私の心配はセキュリティです。私はこれらの概念のいくつかを初めて覚えています。特定の顧客であることの「証明」として、オンデマンドで生成されたUUIDを使用することの主な懸念は何ですか?

上記のシナリオを誰かに開いて、UUIDを盗聴してもらいたいのであれば、理論的には輸送中にUUIDを隠すことができたら、

私はUUIDは人間が読めるものではありませんが、入力はURL/QR /類似のものであると考えています。

答えて

1

有効なユーザーの固定識別子としてUUIDを使用すると危険です。 UUIDはbe unique, not randomに生成されます。攻撃者が正当なUUIDを持っている場合、攻撃者は他のユーザーの識別子を推測しようとする可能性があります。

固定識別子でも簡単にリークする可能性があります。 HTTPSを使用してトランスポートチャネル上の識別子を隠していても、ユーザーがメールへのリンクをコピーしたり、誰かが画面から識別子を書き込んだりするリスクがあります。

HTTPヘッダーがリンクに反映されていないか、画面に表示されているため、HTTPヘッダーに識別子を送信すると、より安全です。それでも、識別子が漏洩した場合、攻撃者はその識別子が盗まれたユーザーを簡単に偽装することができます。

これは、ほとんどの認証システムが限られた時間有効な(セッション)識別子またはトークンを生成する理由です。それが盗まれた場合、それが使用できる制限されたウィンドウがあります。

実行中のプラットフォームや、インターネットやイントラネットでRESTサービスにアクセスしているかどうかについては言及していません。後者の場合、Windows Active Directoryドメインでは、Integrated Windows Authenticationのようなものは、ユーザーのログオンセッションを使用するのが最も面倒です。

そうでなければ、JWT based authenticationのメカニズムを調べるべきでしょう。

+0

ありがとうございます。あなたは、 "HTTPヘッダーの識別子を送信することはもう少し安全です...まだ識別子が漏れた場合、攻撃者は簡単にユーザーを偽装することができます" - これはあなたの正規のユーザー/パスとは本当に違いますか?失われた? – TragedyStruck

+0

いいえ、実際はありません。パスワードはユーザーが変更することができますが。しかし、ユーザー名/パスワードを使用することは、APIを保護するために推奨されていません。これは、クライアントがパスワードを平文で保存して各要求と共に送信することを強制するからです。 – MvdD

0

OpenID Connect 1.0仕様に基づいて認証レイヤーを実装することを検討してください。この場合、認証されたセッションのプロバイダはアプリケーションから外部にあります。 OpenID仕様は拡張性があり、必要に応じて暗号化を使用することができます。

お客様ごとにオンデマンドでUUIDが生成されても、セキュリティは保証されません。 HTTPの会話からUUIDやその他のクリアテキスト情報を盗聴するのは難しくありません。 Open ID Connectは、アプリケーションが認証されたセッションを確立し、一意のセッション識別子を使用して後続の各要求を検証する方法を定義している点で異なります。

要約が役立つことを願っています。 ここでの動作の詳細についてはこちらhttp://openid.net/connect/faq/

+0

OpenID Connectはリダイレクトベースのプロトコルであり、REST APIには適していません。これは通常、Webアプリケーションに使用されます。 – MvdD

関連する問題