2016-04-05 13 views
0

私は、RESTful APIを介してのみバックエンドと通信するアプリケーションを開発しています。今私の認証/承認はすべてOAuth2プロトコルに基づいています。これが十分に安全かどうかは疑問です。私のOAuth2ログインは安全ですか?

私のログイン/ログアウトワークフロー:

  1. は、アクセストークンを要求するためのAPI呼び出しを発行します。情報は、app_key,app_secret,username,password,grant_typeを含む。このトークンをローカルストレージに保存します。これは、このユーザーがログインしていることを示します。
  2. /api/profileのような制限付きのリソースを要求する場合、フロントエンドは、tokenのAjaxリクエストをリクエストヘッダー:Authorization [token]に送信します。
  3. バックエンドはtokenから現在のユーザーを取得し、許可するかどうかを決定します。
  4. ログアウトするには、ローカルストレージからトークンを削除するだけです。

(XSSから保護するための)HTMLエンコードと(トークンの爆発を防ぐための)HTTPSを追加する予定です。

このような「シンプルな」メカニズムは、CSRFなどの一般的な攻撃から自分のサイトを保護するのに十分な安全性を備えているのでしょうか?

答えて

2
  1. クライアントからapp_secretを送信しています。つまり、クライアントはapp_secretを持っているため、サイトを使用している誰にでもリークされます。

  2. はのOAuth2のために、Authorization: bearer [token]

  3. のOAuth2が認証のために意図されていない、唯一承認することになっています。 OAuth2に基づいたOpenID接続を検討したいかもしれません。トークンは、所有者に何らかのアクションを実行するためのアクセス権を与えますが、リクエスターが実際にユーザーであるか、ユーザーによって委任されたユーザーであることを証明します。バレットキー付きの高価な車を考えてみましょう。このキーは車へのアクセスが制限されたトークンです。このトークンを持っている人は誰でも車を運転できます(許可)。しかし、このトークンの譲渡は、車の所有権を証明するものではありません(認証)。

  4. ログアウトメカニズムでは、トークンが有効なので、実際にユーザーをログアウトすることはありません。だから誰かがコピーを持っているなら、そのコピーはまだ有効だろう。トークンを無効にするAPI呼び出しを検討する必要があります。それは場所にする必要がありますので

OAauth2 HTTPSが必要です。

+0

ありがとう@Erlend。しかし、OAuth2は認証用ではありませんか?私はGoogleアカウントに似たシステムを手に入れようとしています。その後、Gmailアカウントは認証を行うことができますか?もう一つのポイントは、クライアントがログインできるようにするには、クライアントが自分のシステムにAppを登録する必要があるため、クライアントが秘密を知っていることです。 Google Appと同じように、アプリの秘密を安全に保つことは、クライアントの責任です。私は正しいですか? – Joy

+0

あなたのポイント2と4は間違いなく感謝します、ありがとう。 – Joy

+0

GoogleはOpenID接続を使用しています:https://developers.google.com/identity/protocols/OpenIDConnect(OAuth 2の上に構築されています) – Erlend

関連する問題