背景
弊社の以下のブログ記事では、Radius サーバーを作成して WorkSpaces の多要素認証を実装する方法を紹介しています。
この記事では、FREERadius
と google-authenticator
のパッケージを使って Radius サーバーを作成しています。
そして、そのサーバー上でgoogle-authenticator
を使ってワンタイムパスワード(OTP)発行用の QR コードを表示する方法も紹介しています。
この後、2次元コードを表示するURLと2次元コードが表示されます。
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/kamata@radius.leaf.local%3Fsecret%xxxxxx%26issuer%3Dradius.leaf.local
しかし、2024年 4月頃から、このURLにアクセスすると404エラーが返されるようになり、QRコードが表示できなくなりました。
このQRコードを表示するURLは、Googleの/chart
APIを使用していましたが、このAPIが廃止になったため、使えなくなったようです。
参考リンク:github.com
解決方法
上記の参考リンクのコミットメッセージによると、以下の方法で解決できます。
- libqrencodeをインストールして、ローカルでQRコードを生成し、端末に表示する。
- 表示されたシークレットを手動で入力する。
qrencode というライブラリ
qrencode
というライブラリをインストールすることで、QRコードをシェル環境で表示できるようです。インストールは以下のコマンドで行います:
sudo yum install qrencode
インストール以降に QRコードを発行するコマンドを実行すると、QRコードがターミナル上に表示されます。
sudo -u ユーザー名 /usr/bin/google-authenticator
qrencode
をインストールすると、以降はgoogle-authenticator
が自動的にそれを使うようになります。
quickchart.io
への置き換えはあまりお勧めできない
Google の /chart
API の代わりに、 quickchart.io の /chart
API を使う方法もありますが、これはあまりお勧めできません。
理由は、QRコードを作成するために、ワンタイムパスワード(OTP)の情報を含むスキーム(otpauth://)を外部のサイトに送信することになるからです。機密情報を外部に渡すリスクがあるため、注意が必要です。
参考として、以下のGitHubのIssueに同様のコメントがあります:
GitHub Issue 244 2049835137
要約すると、機密データを第三者のサイトに送信したくない場合、qrencode
をインストールして、QRコードをローカルで生成する方法が推奨されます。
まとめ
2024年4月以降、Googleの/chart
APIの廃止により、QRコードの表示ができなくなりました。
この問題に対する解決策として、libqrencode
をインストールし、ローカルでQRコードを生成する方法を推奨しています。この方法では、QRコードを外部に送信することなく、機密情報を安全に扱うことができます。
また、外部サービスであるquickchart.io
を利用することも考えられますが、機密情報を第三者のサイトに送信するリスクがあるため、慎重な判断が必要です。安全性を重視する場合は、ローカルでのQRコード生成をお勧めします。
余談
トレーニングのために、丹沢の大倉尾根を1日に4往復してみました。 Yamapというアプリを使うと、平均ペースや移動距離、獲得標高、GPS情報が見えるので、とても面白いです。
山頂は夜景や紅葉が綺麗でした。
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。OSJ koumi 100 で 100 mile 砕け散りました。どこかで 100 mile やりたいです。
基本的にのんびりした性格です。座右の銘は「いつか着く」