Posts

Showing posts from 2023

Svelte+FastAPIでSign in with Googleを試してみた

Image
目次 はじめに 実装するもの Svelteでのフロントエンドの実装 FastAPIでのバックエンド実装 まとめ はじめに SvelteとFastAPIを使用して構築したサンプルウェブサイトにGoogleのサインイン機能を実装しました。 Google Sign Inに成功した後、バックエンドのAPIサーバーにログインするためには、様々な方法が考えられます。 Googleから受け取ったJWTを、Requestヘッダに Authorization: "Bearer: JWT" として送信し、正しいJWTであれば、認証されます。 また、バックエンドでJWTを発行し、 Authorization ヘッダにセットして認証済みユーザーを識別する方法も一般的です。 しかし、JWTをそのままログインユーザーの識別に利用する場合、JWTの漏洩時に即時の無効化が難しい問題があります。 参考: Stop using JWT for sessions 。 そこで、GoogleからJWTを受け取った後、FastAPI側で新たにsession_idを発行し、Cookieを介してセッションを維持する方法で実装しました。 セッション情報はFastAPIのセッションデータベースで管理されており、管理者がいつでもセッションを無効にできます。 また、CookieにSecure属性とHttpOnly属性を付与することで、経路での盗聴防止やJavaScriptからのアクセス防止が可能になり、より安全なWebサイトの構築が可能です。 なお、SvelteもFastAPIも独学で学習中ですので、おかしな点があれば、アドバイスいただけると嬉しいです。 実装するもの 認証が実装されると、未ログイン時のアクセスはログインページにリダイレクトされ、そこでGoogleアカウントでログインできます。 Customerページは、認証に成功した場合にのみ表示できます。 FastAPIではSwagger UIによるドキュメントページが自動生成されます。 Svelteでのフロントエンドの実装 Svelteを使用してフロントエンドを実装します。 バックエンドからcustomerデータを取得し、テーブル表示するページにGoogle OAuth2を利用した認証機能を実装...

UEFI/BIOSのどちらでもGRUB起動可能なUSBメモリを作る

目次 要旨 はじめに やり方 実際にブートできるのか まとめ 要旨 UEFIモードとBIOSモードのどちらでもGRUBを起動可能なUSBメモリの作成を試みた。 どちらの場合でもGRUBの起動が可能であるはずのUSBメモリを作成した。 SupermicroワークステーションとIntel NUCで実機検証したところ、Supermicroのワークステーションでは、どちらのモードでもブート可能であったが、Intel NUCはそうではなかった。 ハードウェアによってはBIOSブート時にパーティションにbootable(active)フラグが必要であるものがあり、その場合は、UEFIブートと両立できないことがわかった。 はじめに USBメモリからLinuxが起動できると便利である。サーバのメンテナンスや新規OSインストールなどの様々な場面で、ディスクレスなLinuxをUSBメモリから起動し役立てることができる。私の場合、自宅や会社のルータとして、USBから起動したDebian Linuxを利用している。ファイルシステムをメモリ(tmpfs)上に展開しディスクレスで運用しているので、なにか設定をしくじった場合にも再起動すればもとの状態に戻すことができるし、ハードウェアが故障してしまった場合などは別のマシンにUSBメモリを差し替えれば簡単に復旧できるので大変重宝している。 Linuxを起動するにはGRUBというブートローダを利用することが多い。GRUBはLinuxカーネルのロードが可能なだけでなく、Windowsのチェインロードも可能である。 かつてのPCは、BIOSというファームウェアがドライブの先頭にあるGRUBをロードしていたが、最近のPCではUEFIがESPにあるGRUBをロードするように仕様に変わった。 BIOSとUEFIではブート仕様が異なるので、GRUBのインストールの方式も異なっていて、一方の方式でLinux及びGRUBインストールしたドライブをもう一方の方式のPCで利用することができない。通常は、HDDやSSD等の起動ドライブをPC間で移動することはあまりないのでそれぞれのPCにそれぞれ適した方式でインストールすれば問題ない。 しかしメンテナンス用のUSBメモリは、できれば、古いBIOS方式でも新しいUEFI方式でも、どちらでも使えるよう...

KVM再入門:Qemuコマンドラインで仮想マシンを起動し、Windows11ゲストをセットアップする。

Image
目次 目次 はじめに Window11のインストール KVM仮想マシンの起動方法 仮想マシンが立ち上がると、UEFシェルが起動してしまう。 インストール先のドライブが見えない インストール時にMicrosoftアカウントへのサインインを求められる 残りのvirtioドライバーをインストール 普段使いのために Linuxホストのネットワークセットアップ Windowsゲスト起動コマンド Windowsゲストのネットワーク設定 その他のTips 参考文献 QemuでのTPMの使い方 QEMUでのUEFI Secure Bootのやり方 どのUEFI firmwareを使うべきか まとめ はじめに 前回 に引き続き、KVM仮想マシン上にWindows11をインストールするやり方をまとめておきます。 Windows10の時とは以下のような違いがあります。 Windows11の場合、TPMとUEFI Secure Bootが必須である。 KVMでTPMを使うには、ホストの/dev/tpm0をパススルーで使う方法と、ソフトウェアのTPMデバイスエミュレーター(swtpm)を使う方法がある。 KVMでUEFI Secure Bootするには、ovmfパッケージにより提供されるUEFI firmwareを利用する。 Window11のインストール KVM仮想マシンの起動方法 Windows11のインストールメディア、virtioドライバインストール用のisoイメージをダウンロードしておきます。 Download Windows 11 Windows用virtioドライバのありか 必要パッケジージのインストール sudo apt-get install qemu-system-x86 virt-viewer ovmf qcow2ディスクイメージを作成します。 qemu-img create -f qcow2 win11pro.qcow2 40G 書き込み用のFirmwareのローカルコピーを作成します。 cp /usr/share/OVMF/OVMF_VARS_4M.ms.fd ./ ホストの/dev/tpm0をパススルーで使う場合 以下のコマンドで仮想マシンを起動できます。 su...

KVM再入門:Qemuコマンドラインで仮想マシンを起動し、Windows10ゲストをセットアップする。

Image
目次 目次 はじめに Windows10インストール 事前準備 仮想マシンの起動とWindowsのインストール 仮想マシンの利用 ライセンス認証 ホストLinuxのネットワーク設定 仮想マシンの起動コマンドライン まとめ はじめに 最近Debian Linuxをインストールしたノートパソコン上に、KVM仮想マシンのゲストOSとして、Windows10をインストールする機会がありました。 はじめはGUI形式のvirt-managerをつかって、ボタンをポチポチ押しながらゲストOSをインストールしていました。 しかし、調べていくうちに、qemuコマンドラインのみで仮想マシンを起動しWindowsをインストールする方法にたどり着いたので、それについてまとめておこうと思います。 virt-managerは非常に便利ですが、libvirtやそれが依存する数多くのパッケージをインストールし、libvirtdなどをデーモンとして動かしておかなければなりません。 qemuコマンドラインのみでWindowsをインストールする方法をおさえておけば、本来不必要だったものをインストールしなくて済みますし、構成がシンプルであるため動作の仕組みが容易に理解でき、なにかトラブルがあった場合にも比較的容易にデバッグが可能になると期待できます。 Windows10インストール 事前準備 インストールメディア、virtioドライバのダウンロード まず、あらかじめ必要なものをダウンロードしておきます。 Windows10のインストールメディアWin10_22H2_Japanese_x64.isoを、 Microsoftのページ からダウンロードする。 virtioドライバをが必要になるので、 Fedoraのページ からダウンロードします。今回は、この記事の執筆時点で最新のvirtio-win-0.1.229.isoを利用しました。 必要パッケジージのインストール sudo apt-get install qemu-system-x86 virt-viewer インストール先ドライブのイメージファイル作成 Windowsのインストール先として、40Gbyteのqcow2イメージファイルを作成します。 qemu-img create -f ...