【Auth0】Auth0事始め/WordPressのユーザー認証をAuth0+Google Appsでシングルサインオンしてみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越妙高オフィスです。昨年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を使ってサクッと用意します。

20170102_auth0wordpress01

WordPress環境が起動したら、ブラウザ越しにsshして管理者パスワードを入手しておきましょう。

20170102_auth0wordpress02

20170102_auth0wordpress03

ブラウザでhttp://<LightsailのPublicIP>/wp-admin/にアクセスするとログインを求められます。Usernameをuserとし、先ほど入手したパスワードを入力してログインします。

20170102_auth0wordpress04

20170102_auth0wordpress05

数分でWordpress環境が用意できちゃいました。Lightsail便利だなー

Auth0プラグインをインストールする

左側のメニューでPluginsを選択してプラグイン管理ページを表示します。検索ボックスにauth0と入力するとLogin by Auth0というプラグインが見つかるのでInstall Nowボタンをクリックしてインストールします。

20170102_auth0wordpress06

プラグインのインストールが終わったらActivateをクリックしてプラグインを有効化します。

20170102_auth0wordpress07

画面がセットアップウィザードに移ります。

まずAuth0で利用する認証形式を選びます。Social LoginだとFacebookやTwitterといったSNSでログインができます。ブログの訪問者にログインしてもらって詳細なトレースをしたい場合はこっちが便利かもしれません。今回はブログの執筆者に対して会社のGoogle ApssアカウントでログインさせてみたいのでEnterprise Loginを選択します。

20170102_auth0wordpress08

Auth0にログインした状態なので、Auth0側の初期設定を行って良いか確認する画面が表示されました。WordpressとAuth0間の認証設定(Client ID、Client Secret、Callback URL)などを自動的にやってくれます。今回は動作確認が目的なので細かいことは気にせず作業を許可して進めることにします。

20170102_auth0wordpress09

Enterprise Loginでユーザーを一元管理するための説明ページが開きます。Google Apps以外にもActive DirectoryやLDAP、SAML、IPアドレス認証が使えるようですね。今回ここを説明すると長くなるので別エントリーで紹介したいと思います。ここではすでにEnterprise Loginは設定できているものとしてSkip this stepをクリックします。

20170102_auth0wordpress10

これでセットアップウィザードは終了です。

20170102_auth0wordpress11

Auth0認証成功時 自動的にWordpressにユーザーを作成するには

1点だけ初期設定から変更しておきます。プラグインの設定ページでAdvancedを開きAuto provisioningを有効化しておきます。

20170102_auth0wordpress12

こうしておくとAuth0で認証されたユーザーが自動的にWordpressのユーザーとして作成されます。ただしRoleはSubscriberとして作成されるためこのままでは記事の投稿はできません。改めてユーザーを編集してEditorに変更することで記事の投稿ができるようになります。

もし新規ユーザーに対してすぐに記事投稿を許可したい場合は、Wordpressの設定でNew User Default RoleEditorにしましょう。

20170102_auth0wordpress13

WordPressにAuth0を使ってログインする

プラグインのインストールが終わったら、改めてhttp://<LightsailのPublicIP>/wp-admin/にアクセスするとAuth0を用いたログイン画面に変わっています。

20170102_auth0wordpress14

ユーザー名にGmailのメールアドレスを入力すると、Google Appsでのログインに切り替わります。Gravatar が設定されているのでアイコンも表示されてますね。

20170102_auth0wordpress15

LOG INをクリックすると裏でAuth0とGoogle Appsの認証処理が行われユーザー情報がWordpressに送られてログインが成功します。画面右上にはちゃんとユーザー情報が表示されてます。

20170102_auth0wordpress16

WordPressへのログインをGoogle Apss認証のみに限定する

今回Auth0プラグインのセットアップウィザードで初期設定を行ったため、Auth0側にもユーザー管理データベースが作成されWordpressの認証ソースとして利用できるようになっています。Auth0側でのユーザー管理(ユーザー・パスワード認証)をしたくない場合はWordpressの認証ソースからAuth0のユーザー管理データベースを無効にすればOKです。

Auth0のダッシュボードを開きClientsから作成された認証クライアント(WordPress)を選びます。今回はuser039s-Blogという名前で作成されていました。

20170102_auth0wordpress17

Connectionsタブを開き、認証ソースのDB-user039s-Blogをオフにします。

20170102_auth0wordpress18

この状態で改めてWordpressのログイン画面を開いて、パスワード認証がなくなりGoogle Appsによる認証だけが有効になっていればOKです。

20170102_auth0wordpress19

まとめ

今回はAuth0を用いてWordpressの認証にGoogle Appsを利用してみました。初めてAuth0を触ってみましたが、簡単に認証をGoogle Appsに一元化できるのは便利ですね。

ただ実運用時に考慮しないといけないこともありそうです。

  • Google Appsでログインできたら無条件にブログの投稿権限を与えていいのか?
  • 「認証」は一元管理できるけど「権限(Role)」はやっぱりWordpress側で行わないといけなさそう(ここはむしろ分けた方がいいかな)
  • ゲストブロガーの認証はどうしよう(Wordpressのローカル認証を引き続き有効にするか)
  • 多要素認証を有効にしたい

この辺は今後も検討していきたいと思います。

参考資料