AWS CognitoをWordPressに実装してワンクリックログインをやってみる

もくじ

はじめに

WordPressのログインに、AWS Cognitoを実装してみたいと思います。

AWS CognitoのボタンをWordpressのログイン画面に実装して、ボタンをクリックするだけでログインできるようにしてみます。(最初のログインだけIDとパスワードが聞かれます)

便利なものかそうでないか、セキュリティとして良いか悪いかはおいといて、設定の流れを仕組みを解説したいと思います。

全体像

構成図(設定値)

簡単に設定の構成図を書いてみると、以下のようになります。

大まかな処理の流れ

処理の流れを超おおまかに書くと、以下のようになると思います。

やってみる

WordPressにプラグイン導入(Cognito認証のためのもの)

WordPressにログインして、プラグインの追加で「OAuth Single Sign On」で検索すれば、「OAuth Single Sign On – SSO (OAuth Client)」が出てくると思うので、「今すぐインストール」ボタンからインストールします。インストール後は「有効化」します。
※詳細な手順は割愛します。

Cognito用ユーザーをWordpressに作っておく

AWS Cognitoの認証で使用するユーザーを、あらかじめWordpressに作成しておきます。ここでは「atsushicognito」という名前にしました。

事前に作成しなくてもCognito認証はできますが、Wordpressの権限が「購読者」となります。

ユーザープールの作成

AWSからAWS Cognitoの画面を表示して、ユーザープールの作成を行います。

サインインに使用できるのは、ここではユーザー名のみとしました。

パスワードポリシーはここではデフォルトとしました。(カスタムでパスワードポリシーを強くしたりできます)

今回はとりあえずやってみよう、という感じでやってるので、他要素認証はオフにしました。(本来ならば有効にして当たり前の設定となります)

サインアップエクスペリエンスの設定は何も変更せず、デフォルトのままとしました。

メッセージ配信は今回の検証では特に考える必要がないので、「CognitoでEメールを送信」にしました。こちらだとSESを使用しなくても大丈夫になります。

ユーザープール名は「TestPool」としました。

アプリケーションクライアントとは、Cognitoで認証を行うアプリ(ここではWordpress)を識別する任意の名前となります。ここでは「TestBlog」としました。

「クライアントのシークレットを生成する」に必ずチェックを入れて、「次へ」ボタンを押します。

最後は確認画面なので、内容を確認して「ユーザープールの作成」ボタンをクリックします。

ユーザープールが作成されました。

ユーザープールにユーザーを作成

ユーザープールにユーザーを作成します。

WordPress上に作ったユーザー名と同じ「atsushicognito」で作成します。

Cognitoドメインの作成

WordPressが認証に使用するCognitoドメインを作成します。ユーザープールの「アプリケーションの統合」タブから「Cognitoドメインの作成」をクリックします。

ドメインを決めます。下の<ここを決める>の部分のみを決めます。

https://<ここを決める>.auth.us-east-1.amazoncognito.com

ここでは「https://atsushinotes.auth.us-east-1.amazoncognito.com」としました。

アプリクライアントIDとクライアントのシークレットを確認

アプリクライアントIDとクライアントのシークレットを確認します。

「アプリケーションの統合」タブに「アプリケーションクライアントのリスト」があり、その中に先ほど作成したアプリの名前(ここでは「TestBlog」)があるので、クリックします。

クライアントIDとクライアントのシークレットが確認できるのでメモします。(後ほど使用します)

アプリケーションクライアントの画面を下にスクロールすると、「ホストされたUI」という項目があるので、そこの「編集」をクリックします。

「コールバックURLの追加」ボタンをクリックします。

以下のように入力しました。

  • コールバックURL:認証のあとにユーザーが行くURL(ここではブログのURLで「https://atsushinotes.work」となります)
  • IDプロバイダー:「Cognitoユーザープール」を選択(Cognitoユーザープールで認証するので)
  • OAuth 2.0権限タイプ:「認可コード付与」を選択
  • OpenID接続スコープ:「OpenID」を選択

WordPressにCognitoの設定を入れていく

WordPressに導入したプラグイン(miniOrange OAuth)の設定画面を表示して、「Add New Application」をクリックします。

Providerの選択画面になるので、「Cognito」で検索すると「AWS Cognito」が表示されるので、クリックします。

コールバックURLを入力する画面が出ます。テストブログのURLは「https://atsushinotes.work」です。このまま「Next」をクリックします。

この画面では、以下のように入力します。

  • App name:Wordpress上で識別する名前なので任意です。(ここでは「cognitoTest」)
  • Authorization Endpoint:https://<Cognitoドメイン>/oauth2/authorize
    ※ここでは「https://atsushinotes.auth.us-east-1.amazoncognito.com/oauth2/authorize」
  • Token Endpoint:https://<Cognitoドメイン>/oauth2/token
    ※ここでは「https://atsushinotes.auth.us-east-1.amazoncognito.com/oauth2/token」
  • Userinfo Endpoint:https://<Cognitoドメイン>/oauth2/userInfo
    ※ここでは「https://atsushinotes.auth.us-east-1.amazoncognito.com/oauth2/userInfo」

認証情報を入力する画面です。先ほどAWSコンソールで確認した、「アプリクライアントID」と「クライアントのシークレット」を入力します。

確認画面が出るので、内容を確認して「Finish」をクリックします。

初回のみ認証の画面が表示されるので、ユーザープールの作成のときに作ったユーザーID(ここでは「atsushicognito」)とパスワードを入力します。

新しいパスワードに変更を求められるので、変更します。メールアドレスは何でも構いません。

接続テストが成功すると、以下の画面が表示されるので「Done」をクリックします。

「Finish」をクリックします。

動作確認

WordPressが一旦ログアウトして、再度ログイン画面を開きます。

するとログイン画面に、「Login with CognitoTest」というボタンが表示されています。

この「Login with CognitoTest」ボタンをクリックすると、「atsushicognito」ユーザーでログインできるはずです。

ログインできました。成功です。

補足ですが、ログイン情報はブラウザのCookieに保存されるので、Cookieを削除するともう一度認証が必要となります。

あとがき

最後までお読みいただきありがとうございました。

今回は動作確認のため、二段階認証などは省いてしまいましたが、うまく使えばユーザーのログイン方法を統一することができますね。

Cognitoを使った認証は、外部プロバイダー(FacebookやGoogleなど)を使用したものもできるため、今後動作を確認していきたいと思います。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

もくじ
閉じる