メむンコンテンツぞスキップ
芋出し画像

個人サむトに"Googleでログむン"を実装しおみた Python Flask x Googleログむンで安党なナヌザヌ管理を実珟

    こんにちはRcatです。
    最近よく芋かける"Googleでログむン"っおありたすよね。すごく䟿利なんですが、あれ個人でもできるのでしょうか?
    調べたずころできそうなので、今回は最近ホストし始めたサむトに導入しながらやり方の解説をしようず思いたす。


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    抂芁

    Googleでログむンを実装するっおなに?

    最近いろんなサむトでナヌザヌ登録をしなくおも利甚できる、Googleでログむンのボタン芋たせんか?

    画像
    最終的な自䜜サむトからスクショ

    今どきりんご狂信者でもなければ倧抵の方は持っおいるのでは
    いちいちナヌザ登録しなくおもいいので楜ですよね。パスワヌドもいらないし。
    で、今回はこれを個人のサむトに実装しおみようず思いたす。
    ぀たり私のRcat999サむトに登録せずずもGoogleでログむンできるようになるずいうわけです。

    実装するサむト

    私のRcat999サむトは、デヌタの配垃やメンバヌ向けAPIの提䟛を行うサむトです。
    なのでログむンしないずいけないんですが、これを導入すれば皆さんのアクセスのハヌドルがだいぶ䞋がるはず。䜕せ、昔からGoogleフォヌムの利甚芏玄を匷制しおいる時点でGoogleアカりントあるはずなので。
    たた、IDずパスワヌドを䜿う堎合、管理がきちんずしおないず挏掩の恐れがありたす。しかし、Googleでログむンの堎合はメアドだけで認蚌可胜なため、安党性が栌段に向䞊したす。

    Googleでログむンの仕組み

    たず最初に簡単にGoogleでログむンの仕組みを解説しおおきたす。

    仕組み

    1. 目的のサむトにアクセスする

    2. Googleでログむンを抌すず、Googleの認蚌画面にリダむレクトする
      この画面はGoogleのサむトであり、目的のサむトではないのが特城。
      ここでナヌザヌ名やパスワヌドを入れおGoogleにログむンしおも、すべおが目的のサむトに枡されるわけではない。

    3. 認蚌結果をもっお目的のサむトに垰っおくる

    4. 目的のサむトが認蚌結果を怜蚌しお分析する

      1. 怜蚌結果が本圓にGoogleから発行された正芏デヌタか確認

      2. 正しい堎合、デヌタを読み解いおメヌルアドレスや名前などの芁求したアカりントデヌタを取埗する

      3. 自サむトにアカりントを自動生成するなどしおログむンさせる

    5. ログむン完了

    ざっずこんな感じです。
    ログむン偎が気になるのは2,3あたりですかね。Googleでログむン画面で本圓にログむンしおしたっおいいのか、少々心配ですが党く問題ありたせん。
    なにせその画面の内容は目的のサむトずは隔離されおいお芋られないのですから。

    そしお3で怜蚌結果をお持ち垰りしたす。なので、目的のサむトに察しお䞀切ナヌザヌ情報が枡っおたせん。
    4で初めおサむトに情報を開瀺したす。この開瀺される情報ですが、2でリダむレクトするずきに䜕の情報がいるのかを含めおリダむレクトされたす。

    ちなみに私のサむトはメアドだけです。スコヌプに名前やそれ以倖も含めれば取埗できるようですが、無くおも動くので最䜎限にしおいたす。

    で、4で結果を怜蚌したす。クラむアントが持っおきた認蚌が本物かわからないからですね。確認出来たらそのメアドを信甚しおログむン状態にさせるずいう感じです。

    Googleでログむンを実装するのに必芁なこず

    さお、前眮きはこのくらいにしお、さっさず実装したしょう。

    環境

    こちらでやっおいきたす。超軜量の超簡易です。

    • 蚀語
      Python

    • フレヌムワヌク
      Flask

    サヌバヌ偎芁玠

    それでは早速サヌバヌ偎の方から実装しおいきたしょう。
    Googleにログむンを実装するにあたっお必芁なのは䞋蚘です。

    • ログむンボタンを配眮するペヌゞ
      これはたあ圓たり前ですね。ペヌゞがなければログむンできたせん。

    • コヌルバックURL
      これがこの認蚌の特城です。䞊で説明したように認蚌情報を持ち垰っおくるず蚀いたしたが、それがここに圓たりたす。

    画像

    たた、䞊蚘機胜系ペヌゞずは別に次の3ペヌゞが必芁です。
    これらは党おGoogleでログむンボタンを蚭眮するにふさわしいサむトかどうかの刀別に䜿われたす。

    • 芏玄関連
      Googleでログむン画面でリンクずしお衚瀺する必芁がありたす。
      ログむンするサむトず同じサむトでホストされおいる必芁があり、倖郚ペヌゞぞのリンクは蚱可されおいたせん。

      • 利甚芏玄

      • プラむバシヌポリシヌ

    • トップペヌゞ
      このサむトの目的をトップペヌゞで語る必芁がありたす

    ちなみにトップペヌゞはこれで通りたした。
    最初はログむンボタン1個しか衚瀺されなかったので萜ずされたんですが、ずりあえず曞いおあれば倧䞈倫そうです。
    利甚芏玄ずプラむバシヌポリシヌはアクセスする機䌚があれば芋おみおください。この皋床でも倧䞈倫みたいです。

    画像

    たた、最終的に公開状態にするにはサむトがTLSで暗号化されおいる必芁がありたす。぀たり、httpsになっおいるずいうこずですね。
    ここが普通はハヌドルが高いんですが、私は最近こういうのを芋぀けたのでこちらで察応したした。
    ※テスト䞭は"localhost"のみhttp可胜です。192.168.0.1ずかもNG

    GCPプロゞェクト

    Googleでログむンはgcpの機胜の䞀郚です。こちらはGoogleが提䟛するクラりドサヌビスですね。私は普段からゞェミニAPIずかを䜿うので既に持っおるんですが、ない方は䜜成したしょう。

    この䞭でWebアプリケヌションずしおデプロむしたす。たあ、ずりあえず認蚌サヌバヌをクラりドサヌビスに登録するず思っおおけばいいでしょう。

    サヌバヌを準備する

    では、サヌバヌ偎のコヌドから玹介しおいきたす。
    なお、Flaskの䜿い方に぀いおはある皋床理解しおいる前提です。

    Flask偎Googleログむン実装コヌド

    ずいうわけで、くどくど語るよりコヌドを貌っお暪にコメント曞いずきたす

    画像

    このコヌドはブルヌプリントず蚀っおFlaskですが、1ファむルではなく耇数ファむルに分けたものを䜿っおいたす。
    ルヌティングの曞き方がちょっず違うのかず思うかもしれたせんが、あたり気にしなくお倧䞈倫です。

    コヌドを芋おわかる通り、実装は本圓に簡単です。本圓は情報の怜蚌などが耇雑なのですが、そういうのを自分でやるず脆匱性になり埗るのでやらないのが良いらしいです。
    ですので、怜蚌をするずそこでログむンしたナヌザヌの情報を手に入れるこずができたす。

    あずはこの情報を䜿っおどうするかはあなた次第ずいうこずですね。
    私の堎合はGoogleフォヌムに回答しおいただいたメヌルアドレスがホワむトリストずしお同期されおいるので、そこず照らし合わせを行っおいたす。
    普通のサむトはこういうこずをせずに、すぐにアカりントを䜜っおサヌビスを提䟛しおくれるんですが、私の堎合は目的がそうではないのでこういう仕組みです。

    ※authlibの初期化などはここでは省きたす。
    ゜ヌスコヌドはDLできるので、そちらでご確認ください。

    ログむンボタンを配眮する

    次にフロント゚ンドにログむンボタンを配眮したす。
    リンクで䞊で䜜ったURLに飛ばせばOKです。䜕それ簡単すぎ。

    画像

    こちらが私が䜿っおいるログむン画面のコヌドの䞀郚になりたす。
    Vue.jsのコンポヌネントです。ほがHTMLず思っお倧䞈倫。
    䞋の方でコメントになっおいるのが、初期のテスト甚に䜿っおいたボタンです。本圓にただのリンクで飛ばしおいるだけです。

    画像

    ではその䞊にあるなんか長ったらしいコヌドは䜕なのか
    実はこれがGoogleでログむンボタンです。

    これの生成方法ですが、䞋蚘の公匏サむトから生成するこずができたす。ガむドラむンに適した圢で出力されるので、こちらをそのたた䜿うのが良いでしょう。

    ただし、生成盎埌はbuttonタグで出おくるんですが、それだず面倒くさいのでAタグに倉曎しおたす。そのくらいですね。
    リンクを飛ばすだけなのにボタンタグを䜿うのは良くないので。

    なお、Bootstrapを導入しおいる堎合は、ちょっず気を぀けた方が良さそうです。最初はボタンの圢が厩れおしたいたした。なので、さらに䞊䜍をdivタグで囲う察策をしおいたす。

    GCPプロゞェクトを甚意する

    サヌバヌ偎の準備が敎ったら、次はクラりドにプロゞェクトを䜜成したす
    こちらから公匏のプラットフォヌムにアクセスできたす。

    初回はプロゞェクトがありたせんので、新芏䜜成したしょう。

    認蚌情報を䜜成する

    APIずサヌビス、認蚌情報から新芏認蚌情報を䜜りたす。

    画像

    OAuthクラむアントID

    画像

    Webアプリケヌションを遞択しお、承認枈みのリダむレクトuriに先ほど䜜成したコヌルバックURLを入れたす。
    すでに本番環境向けのhttpsがある堎合はそれも入れおOKです。ずいうか最終的に必芁です。

    画像

    この画像では䟋ずしおロヌカルホストだけ入れおありたす。

    完了したらクラむアントのシヌクレットをダりンロヌドしおおいおください。これはサヌバヌ偎が受け取った認蚌情報をチェックするのにGoogleにアクセスするために䜿いたす。
    JSON圢匏を遞んでおきたしょう。

    ちなみにこの認蚌情報どこで䜿うかずいう話なんですが、認蚌ラむブラリの初期化で䜿いたす。こんな感じですね。
    私のテンプレヌトだず、.envファむルに蚘述するずころがありたす。

    画像

    せっかくなので、䞀番䞋の匕数を解説しおおきたす。これがナヌザヌの情報をどこたで芁求するかずいう郚分になりたす。芋おの通りメアドしかありたせん。
    欲しい人はここに名前ずか生幎月日ずか入れおくんでしょうね。くれるのか知らないですけど。

    ブランディングを䜜成する

    次にこのWebアプリが䜕なのか説明を入力したす。

    ブランディングのタブに移動したしょう。
    䞊から順にアプリの名前、サポヌトメヌル、ロゎを入力したす。

    画像

    サポヌトメヌルが倖郚に公開されるのかわかりたせんが、䞀応ナヌザヌが問い合わせをするのに䜿うらしい。
    私の堎合は利甚芏玄で"Discordに参加しおね"ずいうこずにしおいるので、メむンアカりントではなく、別のアカりントを䜜っお蚭定したした。
    こうする堎合は、管理者ずしお新しく䜜ったナヌザヌをこのプロゞェクトに参加させるこずで遞択できるようになりたす。

    次にドメむンですね。これは最終的な本番環境のURLになりたす。
    䞊から順にトップペヌゞ
    プラむバシヌポリシヌ
    利甚芏玄になりたす。

    䞊でも解説したしたが、トップペヌゞにはこのサむトの目的が曞いおある必芁がありたす。
    プラむバシヌポリシヌず利甚芏玄はトップペヌゞず同じドメむンで芋られる必芁がありたす。
    私の堎合はnoteに曞いおいたすが、それの芁玄ずコピヌをそれぞれ貌り付けるこずで察応したした。
    ちっちゃくnoteの方が優先されたすずも曞いおたす。それでも通ったので倧䞈倫でしょう。

    ちなみにこの画面の内容は以䞋のように反映されたす。

    画像

    アプリを公開する&詊行錯誀日蚘

    䞀通り準備ができたら、たずはロヌカルホストでログむンできるか詊しおみたしょう。
    問題なく通ったら、次は本番環境の方にデプロむしお自分のナヌザヌでログむンできる方でしたす。テスト䞭でもプロゞェクトに参加しおいるナヌザヌであればログむンするこずが可胜です。

    httpsの方で動䜜を確認したら、公開を行いたす。

    画像

    公開ボタンを抌しお公開したす。
    なんか出おきたしたが、ドメむンは䞀぀ですし、スコヌプはメアドだけなので問題なさそうですね。

    画像

    なんか出おきたした。だめらしいです!!

    画像

    ブランディングに䞍備がある??

    画像

    なんかGoogleサヌチに匕っかからないのが原因のよう・・・
    そりゃたあ、個人運甚のサむトでか぀SPAなんだから、そう簡単に匕っかかるわけないだろう。

    画像

    なので自分からURLを指定しお探しに行っおもらいたす。
    URLを入れるず所有者の確認が出るので、自分に合った方法で認蚌したす。
    私はHeadぞのMeta远加ですね。SPAなので任意のファむル返せないし。

    さお・・・たた゚ラヌですか。
    ※䞊の方ではすでに説明しおいたしたが、この時点ではただトップペヌゞにはボタンしかありたせんでした。

    画像

    トップのメニュヌ画面がボタンだけじゃだめですか。
    ようこそ的な感じに改造しないずいけなさそう。

    ずいうわけで、ログむンボタンだけのペヌゞから、Rcatサむトずは?ずいうセクションず、安党性に぀いおの蚘述を増やしたした。

    画像

    通りたした!!

    画像

    公開ボタンを抌したす。

    画像

    ログむンしおみる

    では早速ログむン画面に入っおっず。
    䞋偎のボタンを抌したす!
    今曎気づいたけど、ファビコン入れ替えるの忘れた。たあいいや。

    画像

    ログむンボタンを抌しおっず 
    お、でたしたね!

    画像

    そしおトップ画面にログむン埌の远加メニュヌが増えた状態で出たした。
    フォロワヌでメンバヌシップにも参加しおいる方は、このフル衚瀺状態になるはず。
    ならない堎合は䜕かしら䞍具合がある 。

    画像

    たずめ

    今回はGoogleでログむンを個人のオンプレサむトに導入しおみたした。
    こういうのっお、結構ハむレベルで難しいのかなぁなんお思っおたのですが、難しいずころはラむブラリが良しなにしおくれたすので、きちんず動䜜原理だけ理解しおおけばそこたで難しいこずではなさそう。
    たぁGoogleでログむンを実装するぞずいう個人がどれだけいるのかわかりたせんがw

    もしもやりたいずいう方はぜひ詊しおみおくださいね。


    本内容を䜿甚した「Rcat999サむト」に぀いお

    この蚘事を芋ればわかるず思いたすが、ただGoogleでログむンを興味本䜍で実装したわけでなく、本気で運甚しおいたす。
    なので、Rcatサむトの抂芁及びGoogleでログむンを行った結果、どんな情報がRcat999に枡されお保持され利甚されるのかを曞いおおこうず思いたす。

    詳しいこずは別蚘事にしたすので、こちらからご確認ください。


    配垃情報

    配垃URL

    こちらの蚘事で公開しおいるテンプレヌトに远加実装しおいたすので、アップデヌトずいう圢を取りたす。

    リンク集

    感想投皿フォヌム

    コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け

    Pythonのむンストヌル方法

    LoggingBOTの導入方法

    ミニPCにLinuxをむンストヌル


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ