2016-11-11 9 views
0

Springブートで構築され、OAuth2を使用するWebベースのAPIがあります。 APIはモバイルアプリケーション用です。Springブートを使用してOAuth2を使用する既存のAPIにクイックサインアップを統合する

モバイルアプリケーションのログインの一環として、ログインするオプションの1つとして、Twitter/Facebookアカウントが使用されています。

私の最初の考えは、APPがFacebook/Twitterでユーザーを認証してからトークンをAPIに渡すことでした。 APIはFacebook/Twitterでトークンを確認し、FB/Twitter Idを収集し、そのIDを使用して新しいアカウントを作成します。しかし、このアプローチの問題は、OAuthライブラリがそのすべてを処理する標準ログイン(ユーザー名/パスワード)のように、既存のOAuthライブラリを使用してベアラトークンを作成する方法がわからないことです。

もう1つの選択肢は、APPにFacebook/Twitterでユーザーを認証させ、ユーザー名としてユーザーFB/Twitter IDを使用してAPIを使用してユーザーを通常どおり登録することですが、統合がはるかに容易です。

分の時点で、認証トークンはOAuthライブラリによってMySQLデータベーステーブルoauth_access_tokenに格納されます。私は手動でJWTを作成し、このテーブルを自分で更新できると思います。

私は有用な提案にはお答えできません。

答えて

0

これは、私が最初に私の質問で提起した解決策である可能性があります。

1)モバイルアプリはFacebook/Twitterでユーザーを認証し、トークンを受け取ります。

2)モバイルアプリは、エンドユーザーのFacebookやTwitterトークンを経由してAPI [/ users/quick-login]にリクエストします。

3)APIはFacebook/Twitterトークンを使用して、Facebook/Twitterからユーザーの詳細を取得します。ユーザーソーシャルメディアIDを取得すると、そのIDを使用してデータベース内のユーザーを検索できます。存在しない場合は、Facebook/Twitterから返された情報を使用してユーザーを作成します。ユーザーのパスワードについては、サーバーのみが知っているキーを使用してユーザーのFacebook/Twitter IDを暗号化します。パスワードは、すべてのパスワードと同じように、データベースに格納される前に再度暗号化されます。これにより、ユーザーのパスワードはFacebook/Twitter IDだけでなく、あまりにも安全でないことが保証されます。

4)我々のAPIはメールアドレスをユーザー名として使用しています。ユーザーのメールアドレスを知っており、パスワードがFacebook/Twitter IDの暗号化されたバージョンであることがわかっているため、自身のOAuthサーバー[/ oauth/token]がユーザー名/パスワードを渡すと、その応答をモバイルアプリに返すだけです。

これは、OAuthサーバーが独自のハードウェアインスタンスで動作している可能性が常にあるため、これを行う最も論理的な方法です。APIのクラスに直接アクセスすることはできません。

+0

**パスワードを暗号化しないでください**、攻撃者がDBを取得したときにも暗号化キーを取得します。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 password_hash、PBKDF2、Bcryptなどの関数を使用します。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 – zaph

+0

申し訳ありませんが、私は言及すべきでした。パスワードは、塩と一緒にパスワードを格納するBCryptを使用してデータベースに格納されます。私が使用する唯一の暗号化は、ソーシャルメディアアカウントのパスワードを生成することです。ユーザーのtwitter IDが123456の場合は、暗号化キーを使用してパスワードを作成し、その結果をデータベースに格納してから、BCryptを最初に渡します。明らかに、もし誰かがプロジェクトのソースコードを入手しようとすれば、私たちがソーシャルパスワードをどのように作成するかを決めることができますが、別の方法で考えることはできません。 – SheppardDigital

+0

攻撃者はサーバーへの管理アクセス、つまり攻撃の仕組みを取得します。攻撃者は専門家であり、毎日働き、攻撃システムで作業しますが、これは通常の仕事です。彼らは熟練しており、おそらくあなたよりもセキュリティと暗号技術が熟練しており、優れた攻撃ツールを持っています。明らかにこれをある程度理解するか、サーバー上の暗号化を気にしないでください。暗号化キーがサーバー上のファイルに格納されている場合は、そのキーが検出されて使用されます。あなたはたぶん攻撃があったことを決して知らないでしょう。 – zaph