自動実行 (LAMP スタックなど) Web アプリでGoogle Authenticator (2 要素認証)を使用するためのパブリック API はありますか?
10 に答える
プロジェクトはオープンソースです。私はそれを使用していません。ただし、文書化されたアルゴリズム (オープン ソース プロジェクト ページにリストされている RFC に記載) を使用しており、認証システムの実装は複数のアカウントをサポートしています。
実際のプロセスは簡単です。ワンタイムコードは、本質的に、疑似乱数ジェネレーターです。乱数ジェネレーターは、シードまたは開始番号が与えられると、乱数のストリームを作成し続ける数式です。シードが与えられた場合、数値は互いにランダムである可能性がありますが、シーケンス自体は決定論的です。したがって、デバイスとサーバーを「同期」させると、「次の番号ボタン」を押すたびにデバイスが作成する乱数は、サーバーが期待する同じ乱数になります。
安全なワンタイム パスワード システムは、乱数ジェネレーターよりも洗練されていますが、概念は似ています。デバイスとサーバーの同期を維持するのに役立つその他の詳細もあります。
したがって、OAuth などのように、他の誰かが認証をホストする必要はありません。代わりに、Google がモバイル デバイス用に提供するアプリと互換性のあるアルゴリズムを実装する必要があります。そのソフトウェアは、オープン ソース プロジェクトで利用可能です (利用できるはずです)。
洗練度に応じて、このプロセスのサーバー側を実装するために必要なすべてを OSS プロジェクトと RFC に提供する必要があります。サーバー ソフトウェア (PHP、Java、.NET など) に固有の実装があるかどうかはわかりません。
ただし、具体的には、これを処理するためのオフサイト サービスは必要ありません。
アルゴリズムはRFC6238に文書化されています。少しこのようになります:
- サーバーは、ユーザーにGoogle認証システムにインストールするための秘密を提供します。Googleはここに記載されているQRコードとしてこれを行います。
- Google Authenticatorは、Unix時間のSHA1-HMACとシークレットから6桁のコードを生成します(これについてはRFCで詳しく説明しています)。
- サーバーは、6桁のコードを検証するためのシークレット/UNIX時間も認識しています。
私はここでjavascriptにアルゴリズムを実装する遊びをしました:http://blog.tinisles.com/2011/10/google-authenticator-one-time-password-algorithm-in-javascript/
PHP 用のさまざまなライブラリ (LAMP スタック) があります。
PHP
https://code.google.com/p/ga4php/
http://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-php/
2 要素認証を実装するときは注意が必要です。サーバーとクライアントのクロックが同期されていること、トークンに対するブルート フォース攻撃に対する保護が行われていること、および使用される初期シードが適切に大きいことを確認する必要があります。
私の質問への回答として投稿された私のソリューションを使用できます(完全なPythonコードと説明があります):
PHP や Perl で実装するのはかなり簡単だと思います。これに関して問題がある場合は、お知らせください。
また、コードを Python モジュールとしてGitHub に投稿しました。
これを見つけました: https://github.com/PHPGangsta/GoogleAuthenticator。私はそれをテストし、私にとってはうまくいきます。
はい、ネットワーク サービスは必要ありません。Google 認証アプリは Google サーバーと通信しないため、サーバーが生成した初期シークレット (QR コードから携帯電話に入力) との同期を維持するだけです。
Theres:サービスとして提供するhttps://www.gauthify.com
Laravel を使用している場合、このhttps://github.com/sitepoint-editors/google-laravel-2FAは、この問題を解決する良い方法です。
C# ユーザーの場合は、この単純なコンソール アプリを実行して、ワンタイム トークン コードを確認する方法を理解してください。最初にNugetパッケージからライブラリOtp.Netをインストールする必要があることに注意してください。
static string secretKey = "JBSWY3DPEHPK3PXP"; //add this key to your Google Authenticator app
private static void Main(string[] args)
{
var bytes = Base32Encoding.ToBytes(secretKey);
var totp = new Totp(bytes);
while (true)
{
Console.Write("Enter your code from Google Authenticator app: ");
string userCode = Console.ReadLine();
//Generate one time token code
string tokenInApp = totp.ComputeTotp();
int remainingSeconds = totp.RemainingSeconds();
if (userCode.Equals(tokenInApp)
&& remainingSeconds > 0)
{
Console.WriteLine("Success!");
}
else
{
Console.WriteLine("Failed. Try again!");
}
}
}