【Auth0】Auth0事始め/WordPressのユーザー認証をAuth0+Google Appsでシングルサインオンしてみる
はじめに
こんにちは植木和樹@上越妙高オフィスです。昨年12月のある日突然ボスから「Auth0使ってみてね(ハート)」という無茶振りがきました。「Auth0ってなんだろ?」って状態からのスタートしてポチポチ触ってます。
Auth0は自分で開発したアプリケーションでログインまわりを実装せず、FacebookやTwitterといったソーシャルサービスやSAMLやADFSといった認証基盤を橋渡ししてくれる「ログインハブ」みたいなクラウドサービス(IdP as a Service)のようですね。つまりAuth0を使うことで各種サービス個別にログインユーザーを管理することなく、Google AppsとかActive Directoryを使ってユーザーを一元管理できそうです。
クラスメソッドではたくさんのSaaSを使ってますが、社員の入社/退社の際の権限付与や剥奪が一箇所で集中管理できてセキュリティー面での強化が図れそうなので、社内情シス担当としては検証してみる価値がありそうです。
そんなわけで、まずはこのDevelopers.IO(Wordpress)をAuth0を使ってユーザー認証できないかな?ということで試してみました。
WordPressの準備
まずはWordpress環境を用意します。EC2を起動してWordpressやMySQLを準備して・・・というのは面倒なので、今回は先日のre:Inventで発表されたLightsailを使ってサクッと用意します。
WordPress環境が起動したら、ブラウザ越しにsshして管理者パスワードを入手しておきましょう。
ブラウザでhttp://<LightsailのPublicIP>/wp-admin/にアクセスするとログインを求められます。Usernameをuserとし、先ほど入手したパスワードを入力してログインします。
数分でWordpress環境が用意できちゃいました。Lightsail便利だなー
Auth0プラグインをインストールする
左側のメニューでPluginsを選択してプラグイン管理ページを表示します。検索ボックスにauth0と入力するとLogin by Auth0というプラグインが見つかるのでInstall Nowボタンをクリックしてインストールします。
プラグインのインストールが終わったらActivateをクリックしてプラグインを有効化します。
画面がセットアップウィザードに移ります。
まずAuth0で利用する認証形式を選びます。Social LoginだとFacebookやTwitterといったSNSでログインができます。ブログの訪問者にログインしてもらって詳細なトレースをしたい場合はこっちが便利かもしれません。今回はブログの執筆者に対して会社のGoogle ApssアカウントでログインさせてみたいのでEnterprise Loginを選択します。
Auth0にログインした状態なので、Auth0側の初期設定を行って良いか確認する画面が表示されました。WordpressとAuth0間の認証設定(Client ID、Client Secret、Callback URL)などを自動的にやってくれます。今回は動作確認が目的なので細かいことは気にせず作業を許可して進めることにします。
Enterprise Loginでユーザーを一元管理するための説明ページが開きます。Google Apps以外にもActive DirectoryやLDAP、SAML、IPアドレス認証が使えるようですね。今回ここを説明すると長くなるので別エントリーで紹介したいと思います。ここではすでにEnterprise Loginは設定できているものとしてSkip this stepをクリックします。
これでセットアップウィザードは終了です。
Auth0認証成功時 自動的にWordpressにユーザーを作成するには
1点だけ初期設定から変更しておきます。プラグインの設定ページでAdvancedを開きAuto provisioningを有効化しておきます。
こうしておくとAuth0で認証されたユーザーが自動的にWordpressのユーザーとして作成されます。ただしRoleはSubscriberとして作成されるためこのままでは記事の投稿はできません。改めてユーザーを編集してEditorに変更することで記事の投稿ができるようになります。
もし新規ユーザーに対してすぐに記事投稿を許可したい場合は、Wordpressの設定でNew User Default RoleをEditorにしましょう。
WordPressにAuth0を使ってログインする
プラグインのインストールが終わったら、改めてhttp://<LightsailのPublicIP>/wp-admin/にアクセスするとAuth0を用いたログイン画面に変わっています。
ユーザー名にGmailのメールアドレスを入力すると、Google Appsでのログインに切り替わります。Gravatar が設定されているのでアイコンも表示されてますね。
LOG INをクリックすると裏でAuth0とGoogle Appsの認証処理が行われユーザー情報がWordpressに送られてログインが成功します。画面右上にはちゃんとユーザー情報が表示されてます。
WordPressへのログインをGoogle Apss認証のみに限定する
今回Auth0プラグインのセットアップウィザードで初期設定を行ったため、Auth0側にもユーザー管理データベースが作成されWordpressの認証ソースとして利用できるようになっています。Auth0側でのユーザー管理(ユーザー・パスワード認証)をしたくない場合はWordpressの認証ソースからAuth0のユーザー管理データベースを無効にすればOKです。
Auth0のダッシュボードを開きClientsから作成された認証クライアント(WordPress)を選びます。今回はuser039s-Blogという名前で作成されていました。
Connectionsタブを開き、認証ソースのDB-user039s-Blogをオフにします。
この状態で改めてWordpressのログイン画面を開いて、パスワード認証がなくなりGoogle Appsによる認証だけが有効になっていればOKです。
まとめ
今回はAuth0を用いてWordpressの認証にGoogle Appsを利用してみました。初めてAuth0を触ってみましたが、簡単に認証をGoogle Appsに一元化できるのは便利ですね。
ただ実運用時に考慮しないといけないこともありそうです。
- Google Appsでログインできたら無条件にブログの投稿権限を与えていいのか?
- 「認証」は一元管理できるけど「権限(Role)」はやっぱりWordpress側で行わないといけなさそう(ここはむしろ分けた方がいいかな)
- ゲストブロガーの認証はどうしよう(Wordpressのローカル認証を引き続き有効にするか)
- 多要素認証を有効にしたい
この辺は今後も検討していきたいと思います。