GoでOpenID ConnectのClientを実装する(Auth0設定編)

はじめまして、エンジニアの稲垣です。

はじめての記事投稿ですが、こっそりと他の記事に2回登場したことがあります。(ぜひ見つけてみてください!)

はじめに

HRBrainでは先日、OpenID Connectによるシングルサインオン対応をリリースしました。

OpenID ConnectとはOAuth2.0を使ってユーザ認証を行うための方法です。

シングルサインオンの文脈でよく登場するユーザ認証方法のひとつです。

今回から複数回にわけて、OpenID Connectを提供する認証プロバイダ(以降、OP)を利用して、OpenID ConnectのClientをGoで実装する方法について書いていきます。

今回はAuth0設定編です!

認証フロー

まずOpenID Connectによる認証フローについて見てみたいと思います。

OpenID Connectによる認証は以下のフローで行われます。

f:id:ingtk:20190530130127p:plain

  1. まずユーザのログインボタンクリックなどをトリガーにアプリケーションサーバにリクエストが送信されます。

  2. アプリケーションサーバはリクエストを受信すると、クライアント識別子(Client ID / Client Secretなど)を含めたリクエストを生成し、OPにリダイレクトします。

  3. OPはリクエスト情報を検証し、認証・認可画面を表示します。

  4. ユーザは認証に必要な情報を入力し、OPはその情報を検証します。OPは認可コードを付与し、アプリケーションサーバのコールバックURLにリダイレクトします。

  5. アプリケーションサーバは認可コードを元に、OPにIDトークンと呼ばれる署名つきのJWTを要求します。

  6. アプリケーションサーバはOPからIDトークンが返却されるとそれを解析し正当性を検証します。

以上が、認証の流れになります。

このように、OPの情報を含めたリクエストを生成するためにはOPから Client ID / Client Secret といったクライアント識別子を教えてもらう必要があります。

また、OPにアプリケーションのドメインやコールバックURLを伝え、信頼してもらう必要もあります。

以降では、そのための設定をしていきます。

準備

今回はタイトルにあるようにAuth0というOPを利用します。

Auth0とは、OpenID Connectに対応している認証プラットフォームです。(いわゆるIDaaS)

Auth0には2019/05現在、無料プランがあり、簡単な疎通確認だけであれば十分な機能を無料で利用することができます。

今回は最低限の疎通確認を行うために、

  • アプリケーション登録
  • ユーザ管理

の設定を行います。

アプリケーション登録

  1. Auth0にログインします(アカウントがない場合、作成してください)

  2. Applications 内にある+ CREATE APPLICATIONをクリックします。 f:id:ingtk:20190529182224p:plain

  3. Nameに適当なアプリケーション名を入力し、Regular Web Applicationsを選択し、CREATEをクリックします。 f:id:ingtk:20190529124730p:plain

  4. 作成されたアプリケーションの情報が表示されます。 f:id:ingtk:20190529182831p:plain

Domain / Client ID / Client Secret などは先述の通り、認証エンドポイントへのリダイレクトに必要な情報になりますので必要なときに参照します。

また少し下にスクロールすると Allowed Callback URLsという入力項目があります。

こちらには、実装するアプリケーションのコールバックURLを入力します。

このあたりの項目については、後日公開する実装編にて再度触れたいと思います。

ログイン可能なユーザの作成

つづいてログイン可能なユーザを作成します。

まず、ユーザを管理するためのデータベースを作成します。

  1. メニューの Connections -> Database をクリックし、表示された画面にある + CREATE DATABASE をクリックします。 f:id:ingtk:20190530085621p:plain

  2. Nameを入力し(今回はMy-DatabaseCREATEをクリックすると、データベースが作成されます。 f:id:ingtk:20190530111144p:plain

  3. Applicationsタブをクリックすると、作成したアプリケーションが表示されているので有効にします。 f:id:ingtk:20190530113458p:plain

  4. メニューの Users & Roles -> Users をクリックし、表示された画面にある+ CREATE USERをクリックします。 f:id:ingtk:20190530113826p:plain

  5. 入力したメールアドレスに確認メールが届いているのでメール内のリンクをクリックしてユーザを有効化します。

ここまでの設定で、アプリケーションの設定と、認証可能なユーザが作成されたので、あとはクライアントが実装できれば、認証の疎通確認ができることになります。

今回は設定編ということでここまでです!

次回はGoでクライアントの実装をしていきます!