OAuth2とFacebookでのログインについて知っておくべきこと
公開: 2022-03-10OAuth2とは何か疑問に思われる方のために説明すると、これは誰でもFacebookアカウントでログインできるようにするプロトコルです。 これは、アプリやあらゆる場所のWebサイトの[Facebookでログイン]ボタンを強化します。
この記事では、「Facebookでログイン」がどのように機能するかを示し、その背後にあるプロトコルについて説明します。 Facebook、Google、Microsoft、またはOAuth2をサポートする他の多くの企業の1つでログインする理由を学びます。
この記事では、「Facebookでログイン」がどのように機能するかを示し、その背後にあるプロトコルについて説明します。 Facebook、Google、Microsoft、またはOAuth2をサポートする他の多くの企業の1つでログインする理由を学びます。
2つの例を見ていきます。SpotifyがFacebookを使用してSpotifyモバイルアプリにログインできるようにする理由と、QuoraがGoogleとFacebookを使用してWebサイトにログインできるようにする理由です。
SmashingMagの詳細:
- モバイルアプリケーションを構築する4つの方法
- 正直なUIを構築し、ユーザーがより良い意思決定を行えるようにする方法
- 起動後もAndroidアプリの人気を維持
- プレイリストをSpotifyして、コーディングとデザインセッションを促進します
OAuth2の前
OAuth2は、数年前に標準の戦いに勝ちました。 これは、主要ベンダーによってサポートされている唯一の認証プロトコルです。 GoogleはすべてのAPIにOAuth2を推奨しており、FacebookのGraphAPIはOAuth2のみをサポートしています。
OAuth2を理解する最良の方法は、OAuth2の前に何があったのか、なぜ別のものが必要なのかを調べることです。 それはすべて基本認証から始まりました。
基本認証
認証スキームは、2つの重要な質問に焦点を当てています。あなたは誰ですか。 そして、あなたはそれを証明できますか?
これらの2つの質問をする最も一般的な方法は、ユーザー名とパスワードを使用することです。 ユーザー名はあなたが誰であるかを示し、パスワードはそれを証明します。
基本認証は、最初のWeb認証スキームでした。 面白そうに聞こえますが、1999年に最初に公開された仕様では、「基本認証」が実際の名前でした。
基本認証を使用すると、Webサーバーはブラウザが理解できる方法でこれらの資格情報を要求できます。 サーバーは、 401
のHTTP応答コード(認証が必要であることを意味します)を返し、 WWW-Authenticate
という名前の特別なヘッダーをBasic
の特別な値で応答に追加します。
ブラウザにこの応答コードとこのヘッダーが表示されると、ポップアップログインダイアログが表示されます。
基本認証の大きな部分は、その単純さです。 ログイン画面を作成する必要はありません。 ブラウザはそのすべてを処理し、ユーザー名とパスワードをサーバーに送信するだけです。 また、ユーザーがパスワードを覚えたり、サードパーティのプラグインから取得したり、オペレーティングシステムからユーザーの資格情報を取得したりすることで、ブラウザがパスワードを特別に処理する機会を提供します。
欠点は、ログイン画面のルックアンドフィールを制御できないことです。 つまり、スタイルを設定したり、「パスワードをお忘れですか?」などの新しい機能を追加したりすることはできません。 リンクまたは新しいアカウントを作成するためのオプション。 さらにカスタマイズしたい場合は、カスタムログインフォームを作成する必要があります。
カスタムログインフォーム
カスタムログインフォームを使用すると、必要なすべてのコントロールを利用できます。 HTMLフォームを作成し、資格情報の入力を求めます。 次に、フォームを送信して、任意の方法でログインを処理します。 完全に制御できます。スタイルを設定したり、詳細を尋ねたり、リンクを追加したりできます。
WordPressなどの一部のWebサイトでは、ログイン画面に単純なフォームを使用しています。
LinkedInを使用すると、ユーザーはWebサイトの別の部分にアクセスしなくても、同じページでログインまたはアカウントを作成できます。
フォームベースのログインは非常に人気がありますが、根本的な大きな問題があります。ユーザーはWebサイトにパスワードを通知する必要があります。
秘密を守る
セキュリティ界では、パスワードを秘密と呼んでいます。 それはあなただけが持っている情報であり、あなたがあなたであることを証明します。 シークレットは単なるパスワード以上のものにすることもできます。 これについては後で詳しく説明します。
Webサイトは世界中のすべてのセキュリティ対策を講じることができますが、ユーザーがパスワードを共有すると、そのセキュリティは失われます。 ハッカーは2010年にGawkerのWebサイトに侵入し、多くのユーザーのパスワードを公開しました。 これはGawkerの問題でしたが、問題はそれだけではありませんでした。 ほとんどの人はパスワードを再利用するため、ハッカーはGawkerから漏洩したデータを取得し、Gmail、Facebook、eBayなどのより重要なWebサイトにログインしようとしました。 より重要なことにゴーカーのパスワードを使用した人は誰でも、ハルク・ホーガンのセックステープに関する最新のゴシップよりもはるかに多くを失いました。
ユーザーが複数のアカウントのパスワードを再利用しないようにすることが問題の前半であり、それは不可能です。 インターネット全体で異なるアカウントを作成する必要がある限り、パスワードを再利用します。
問題の後半は、パスワードを安全に保管することです。
誰かがあなたのアプリにログインするとき、あなたは彼らのパスワードを確認する必要があります、そしてそれはあなたがそれに対してそれを確認するためにあなたがコピーを必要とすることを意味します。 すべてのユーザー名とパスワードをどこかのデータベースに保存できますが、これらのパスワードを紛失したり、ハッキングされたりするリスクがあります。 ベストプラクティスは、SHA-2関数の1つなどのハッシュ関数を使用することです。 この関数は、データを取り戻すことができない方法でデータを暗号化しますが、暗号化を複製することはできます。「my password」は、毎回bb14292d91c6d0920a5536bb41f3a50f66351b7b9d94c804dfce8a96ca1051f2
のようなものにハッシュされます。
そして今、私たちは背の高い草の中にいます:私はあなたに暗号化プロトコルを実装する方法を教えています。 次に、データにソルトを追加する方法と、man-in-the-middle攻撃で読む教科書について説明する必要があります。 あなたがやりたかったのはアプリを書くことだけです、そして今あなたはセキュリティの専門家になる必要があります。 後退する必要があります。
OAuth2
あなたはおそらくセキュリティの専門家ではありません。 あなたがそうだとしても、私はまだ私のパスワードであなたを信用しません。 OAuth2はあなたにもっと良い方法を提供します。
例として、iPadでSpotifyを使用しています。 私は音楽を聴くために会社に月額10ドルを支払います。 Spotifyでは3つのデバイスにしかアクセスできないため、他の人が私のアカウントを使用しないようにするためのパスワードが必要です。 私のSpotifyアカウントはセキュリティ上の大きな問題ではありません。 ハッキングされることは世界の終わりではありませんが、会社は私のクレジットカードを持っているので、私は安全であることを確認したいと思います。
Spotifyにログインすることはほとんどないので、別のアカウントを作成したくなく、別のパスワードを覚えておく必要があります。 Spotifyは私にもっと良いオプションを与えます:
Facebookアカウントを使用してログインできます。そのボタンをタップすると、Spotifyからfacebook.comに送信され、そこでログインします。 これは細かいことのように思えるかもしれませんが、プロセス全体の中で最も重要なステップです。
Spotifyのプログラマーは自分でログインフォームを作成し、バックエンドAPIを使用してユーザー名とパスワードをFacebookに送信することもできますが、それを望まない理由は2つあります。
- FacebookのパスワードでSpotifyを信用していません。 私はFacebookを使って友達とつながり、ハッキングされたくありません。 Spotifyがパスワードを正しく処理することを信じていません。 私はまた、それで何か面白いことをしたいという誘惑を避けることができるとは信じていません。 後で使用できるように保存しようとするかもしれません。 たぶん、Facebookに送信する前にどこかのファイルに書き込むバグがあるので、ハッカーがそれをつかむ可能性があります。 すみません、Spotify。 私は信頼できる種類ではありません。
- Spotifyにすべてを任せたくありません。 Spotifyに音楽を再生してもらいたい。 スパイス・ガールズを聴いているときに、友達の壁に投稿したくありません。 また、友達のリストをダウンロードして、Spotifyに参加するようにバグを報告させたくありません。 私がSpotifyにFacebookのパスワードを与えた場合、それはFacebookに私としてログインする可能性があります。 それは私ができることなら何でもできる。
Spotifyがそれを望まない2つの大きな理由もあります:
- Facebookには、ログインするための複数のオプションがあります。 ユーザー名とパスワードを使用してログインするか、Facebookアプリを使用してログインできます。 Facebookからパスワードを取得したり、Spotifyが提供できないヘルプを利用したりすることもできます。 Spotifyにパスワードを渡しただけでは、これらのオプションは表示されません。
- 私の秘密はパスワードではないかもしれません。 。 パスワードは私の月額$ 10のSpotifyアカウントには十分なセキュリティですが、私の銀行やさらに重要なものには十分ではない可能性があります。 私が提供できる他の多くの秘密があります:私はスマートカードを持っているかもしれません、または私はミッションインポッシブル映画に住んでいて網膜スキャナーを使用しているかもしれません。
私はミッションインポッシブルの映画には出演していませんが、現実の世界では、多くの企業がパスワードとその他の2要素認証を使用しています。 最も一般的な方法は、電話を使用することです。 ログインしたい場合、会社は数分間続く特別なコードを含むテキストを送信します。 次に、コードを入力するか、アプリを使用してコードを入力します。
今、会社はあなたの電話なしでは誰もあなたのアカウントにログインできないと確信しています。 誰かがあなたのパスワードを盗んだ場合でも、彼らはログインできません。あなたがあなたの電話を紛失しない限り、すべてが安全です。
FacebookだけがOAuth2プロバイダーではありません。 GoogleアカウントでQuoraにログインすると、GoogleはQuoraが何をしたいのかを教えてくれ、それでいいかどうか尋ねます。
Quoraに自分のメールアドレスと基本的なプロファイルデータの表示を許可しても問題ないかもしれませんが、連絡先を管理したくありません。 OAuth2は、Quoraが必要とするすべてのアクセスを表示し、アクセスを許可するものを選択できるようにします。
つまり、これらがOAuth2の利点です。 それがどのように機能するか見てみましょう。
OAuth2の仕組み
Facebook、Google、およびその他のほとんどのOAuth2プロバイダーは、ネイティブクライアントをWebクライアントとは異なる方法で処理します。 ネイティブクライアントはより安全であると見なされ、数か月続く可能性のあるトークンと更新トークンを取得します。 Webクライアントは、はるかに短いトークンを取得します。これは通常、ユーザーがブラウザーを閉じるか、Webサイトをしばらくクリックしなかったときにタイムアウトになります。
どちらの場合も、ログインプロセスは同じです。 違いは、ユーザーがそれを通過する必要がある頻度にあります。
OAuth2ログインは、次の一般的な手順に従います。
- ユーザーは、認証を必要とする何かを行おうとします。 これは、アプリを開くか、[ログイン]ボタンをクリックするのと同じくらい簡単です。
- アプリまたはWebサイトは、ユーザーがまだログインしていないと判断し、ログインプロセスを開始します。 これを行うには、Webページを開き、Facebook、Google、またはOAuth2を提供している他のWebサイトの特別なURLに送信します。
OAuth2プロバイダーの新しいブラウザーウィンドウを開くことは重要なステップです。 これにより、プロバイダーは独自のログインフォームを表示し、各ユーザーに必要なログイン情報を尋ねることができます。 ほとんどのアプリは、埋め込まれたWebビューを使用してこれを行います。
プロバイダーのログインURLとともに、プロバイダーに自分が誰で何をしたいかを伝えるいくつかのURLパラメーターを送信する必要があります。
-
client_id
これは、アプリが何であるかをOAuth2プロバイダーに通知します。 クライアントIDを取得するには、事前にアプリを登録する必要があります。 -
redirect_uri
これは、完了時にどこに行きたいかをプロバイダーに通知します。 Webサイトの場合、これはメインページに戻る可能性があります。 ネイティブアプリは、Webビューを閉じるページに移動できます。 -
response_type
これは、何を返したいかをプロバイダーに通知します。 通常、この値は、アクセストークンが必要であることを示すtoken
、またはアクセスコードが必要であることを示すcode
のいずれかです。 プロバイダーは、この値を拡張して他のタイプのデータを提供することもできます。 -
scope
これは、アプリがアクセスしたいものをプロバイダーに通知します。 これは、Quoraが連絡先を管理するためのアクセスを要求していることをGoogleが知る方法です。 各プロバイダーには、異なるスコープのセットがあります。
セキュリティを強化したり、キャッシュを支援したりできる追加のフィールドがあります。 一部のプロバイダーもフィールドを追加できますが、これら4つは重要なものです。
アプリがWebビューを開くと、プロバイダーが引き継ぎます。 単純なユーザー名とパスワードを要求するだけの場合もあれば、お気に入りの先生の名前から母親の旧姓まで、何でも要求する複数の画面を表示する場合もあります。 それはすべて彼ら次第です。 重要なのは、プロバイダーが完了すると、プロバイダーがあなたにリダイレクトしてトークンを提供することです。
トークンがすべてです
プロセスが完了すると、プロバイダーからトークンとトークンタイプが提供されます。 トークンには、アクセストークンと更新トークンの2種類があります。 あなたが持っているクライアントのタイプは、あなたが要求することを許可されているトークンのタイプを決定します。
Spotifyアプリにログインすると、自分の電話は自分だけが使用していると想定されているため、何ヶ月もログインしたままにできます。 FacebookはSpotifyアプリがトークンを管理することを信頼しており、私はSpotifyアプリがトークンを失わないことを信頼しています。
アクセストークンがタイムアウトすると(通常、1〜2時間で)、Spotifyは更新トークンを使用して新しいトークンを取得できます。
更新トークンは数か月続きます。 そうすれば、私は年に数回電話にログインするだけで済みます。 欠点は、その更新トークンを紛失した場合、他の誰かが私のアカウントを数か月間使用する可能性があることです。 更新トークンは非常に重要であるため、iOSはトークンのキーチェーンを提供し、トークンを確実に暗号化して安全に保存します。
WebアプリケーションでOAuth2を使用する場合も同じように機能します。 Webビューを使用する代わりに、フレーム、iframe、または別のウィンドウでOAuth2ログイン要求を開くことができます。 現在のページで開くこともできますが、これにより、誰かがログインする必要があるときはいつでも、すべてのJavaScriptアプリケーションの状態が失われます。
WebブラウザでQuoraにログインしても、更新トークンを取得できません。 彼らは、トークンがタイムアウトして、ブラウザを終了したとき、または昼食のために立ち去ったときに、再度ログインするように促してくれることを望んでいます。 信頼できないクライアントは、重要な更新トークンを保持することを信頼できないため、トークンを更新できません。 より安全ですが、より頻繁に再度ログインするように求められるため、利便性は低くなります。
アプリでのOAuth2の使用
これで、OAuth2がどのように機能するかがわかりましたが、独自のOAuth2クライアントを実装したくない場合があります。 睡眠に問題がある場合は、75ページのOAuth 2.0仕様全体を読むことができますが、読む必要はありません。 いくつかの優れたライブラリがあり、使用できます。
iOSにはOAuth2のサポートが組み込まれています。 Corrina Krychには、SwiftでOAuth2.0を使用するための非常に役立つチュートリアルがあります。 トークンを取得する方法、アプリでビューを統合する方法、トークンを保存する場所について説明します。
Androidには、OAuth2のサポートも組み込まれています。 私はiOSに焦点を合わせているので、私はそれに慣れていないことを認めなければなりませんが、ドキュメントには例を示す良いセクションがいくつかあり、さらに簡単にするためのオープンソースライブラリがいくつかあります。
JavaScriptにはOAuth2のサポートが組み込まれていませんが、すべての主要なJavaScriptライブラリのクライアントがあります。 ReactはOAuth2を完全にサポートしています。 AngularJSは、多くのプロジェクトでOAuth2.0をサードパーティでサポートしています。 私もそれらの1つを書きました。
OAuth2クライアントを作成したら、プロバイダーを選択する必要があります。
誰を信頼しますか?
ここでの大きな前提は、私がSpotifyよりもFacebookを信頼しているということです。 その理由はありません。 Facebookは内部セキュリティを公開しておらず、私がそれを監査する良い方法はありません。 Spotifyもそうではありません。 OAuth2セキュリティに関するコンシューマーレポートはありません。 Facebookは大きいので、基本的に信頼しています。 他の人がそうするので、私はFacebookを信頼します。
また、「Facebookでログイン」ボタンをクリックするたびにFacebookを信頼しています。 Facebookが私のパスワードを紛失した場合、ハッカーは私のFacebookアカウントだけでなく、私のSpotifyアカウントや、私のFacebookアカウントでログインした他のサービスにもアクセスできるようになります。 利点は、問題を解決するためにパスワードをリセットする必要がある場所が1つしかないことです。
Facebookを信頼する必要はありませんが、誰かを信頼する必要があります。 誰かが私を認証する必要があります。 信頼できるプロバイダーを選択する必要があります。
OAuth2プロバイダーの選択
ウィキペディアにはOAuthプロバイダーのリストがありますが、ほとんどのプロバイダーについては気にしないでしょう。 大きなものはFacebookとGoogleです。 また、AmazonやMicrosoftも検討することをお勧めします。
4つすべてが大きく、簡単に統合できます。 Facebookは、アプリを登録するための手順を提供します。 Googleにも同様の手順があります。 基本的な考え方は、開発者アカウントを作成してからアプリIDを作成することです。 次に、プロバイダーは、要求を行うために使用できるクライアントIDを提供します。
複数のプロバイダーを選択することもできます。 Quoraを使用すると、FacebookまたはGoogleでログインできます。 どちらもOAuth2を使用しているため、両方に同じコードを使用できます。
OAuth2に欠けているもの
OAuth2は複雑な問題を解決するのに非常に優れていますが、いくつかの点が欠けています。
- 標準は完全に標準ではありません。 いくつかの
if
ステートメントなしでFacebookとGoogleの両方にログインできる単一のOAuth2クライアントを作成することはできませんでした。 それぞれが仕様を異なる方法で解釈し、それぞれに異なる詳細はほとんどありません。 また、提供するスコープについても常に異なるアイデアがあります。 ライブラリを使用してOAuth2と統合すると、この問題に大いに役立ちますが、アプリのコードで100%透過的になることはありません。 - ログアウトするのは難しいです。 。 OAuth2を使用するすべてのアプリまたはWebサイトにはログアウトボタンがありますが、ほとんどの場合、トークンを無効にせずに忘れてしまいます。 アプリは現在のトークンをすべて忘れて、他の誰かがログインできるようにしますが、トークンは引き続き有効です。 ハッカーがあなたのトークンを盗んだ場合でも、ハッカーはそれを使用してあなたとしてログインすることができます。
OAuth2トークンを無効にするための別の仕様がありますが、それは多くの主要なプロバイダーによって採用されていませんでした。 OAuth2は、ハッカーが更新トークンを取得した場合に回復する方法を提供しません。 トークンのローカルコピーを削除できたとしても、ハッカーはそれを保持します。 多くのプロバイダーがアカウントを一時停止する方法を提供していますが、それを行う標準的な方法はありません。
多くのプロバイダーが公開鍵暗号を使用してステートレストークンを作成するため、OAuth2を守るために、これは難しい問題です。 これは、サーバーが作成したトークンを記憶していないため、後で忘れることができないことを意味します。
OAuth2のもう1つの大きな問題は、プロバイダーに依存していることです。 Facebookがダウンすると、アプリの[Facebookでログイン]ボタンもダウンします。 GoogleがOAuth2をサポートするために課金を開始することを決定した場合、またはOAuth2と利益を共有することを要求した場合、あなたにできることは何もありません。 これは、プロバイダーを信頼するという両刃の剣です。プロバイダーはあなたのために多くのことを行っていますが、ユーザーを制御できます。
OAuth2は世界を動かします
いくつかの機能が不足していて依存関係が大きい場合でも、OAuth2は依然として優れた選択肢です。 これにより、ユーザーはアプリに簡単にログインでき、すべてのWebサイトのパスワードを覚えておく必要がなく、セキュリティを信頼できます。 OAuth2は非常に人気のある選択肢です。 それは業界を支配します。 OAuth2の採用に近いセキュリティプロトコルは他にありません。
これで、OAuth2がどこから来て、どのように機能するかがわかりました。 誰を信頼するかについて賢明な選択を行い、暗号化されたパスワードの安全な保存に関する記事を読むのをやめ、すばらしいアプリの作成により多くの時間を費やしてください。