BETA

kintoneにSSO環境を実装する【Auth0編】

投稿日:2019-12-23
最終更新:2019-12-23

はじめに

本記事は kintone2 Advent Calendar 2019 の23日目の記事です。

もともとqiitaをけっこう使っていたのですが、ちょっと前にQrunchのアカウントを作成したこともあり、せっかくの機会なのでこちらに投稿します。
この記事は、数年くらい前にやりかけて挫折したものを、Auth0を使って実現したものです。

遠い過去の記憶はこちら → LightSailでWindows Server立ち上げて日本語化してみた

当時はADFS環境をいかにして実現するかというところでいろいろAWS上で試行錯誤して結局壁にぶち当たったまま虚しい時間だけが過ぎていました。。。
(今となってはなんであんなに頑張ってやろうと思ってたのかもはや思い出せないレベル…

実はkintoneでSSOしたい!という声は周りでもちらほら聞きます。
厳密にはkintoneで、というよりは、サイボウズが提供しているcybozu.comというサービスプラットフォーム上で設定することになるんですが、これがまた cybozu developer Network 上にある記事も化石ばりに古いという。
SAML認証 - cybozu developer Network

最近はIDaaSもいろいろ増えてきて、手軽に認証基盤を使えるようになりました。
そこで、個人的にだいぶ前から試してみようと思っていたAuth0を使って今回SSOを実装してみたいと思います。
https://auth0.com/jp/

Auth0の新規サインアップ

Auth0自体の説明は有識者がたくさんブログでアウトプットしてくれてるので省略します。
新規サインアップテナント作成の部分は以下のqiitaの記事がすごく参考になります。
ウィザード形式に沿って設定を進めるだけでサインアップは完了します。
クラウド認証サービス Auth0 の無料トライアルを試してみよう

kintoneの新規サインアップ(30日間無料お試し)

今回はテストなので、30日間の無料お試し環境を取得します。
https://kintone.cybozu.co.jp/trial/

kintoneにおけるSSOの構成について

今回はAuth0をIdPとして利用し、kintone(cybozu.com)はSPとしての役割を果たします。
IdP(Auth0)とSP(cybozu.com)、ユーザーの相関関係は以下の通り。
SAML認証を使用したシングルサインオンを設定する - cybozu.comヘルプ

フローについてはサイトから抜粋(図もお借りしました)

  1. ユーザーがSP(cybozu.com)にアクセス
  2. SPがSAMLリクエストを生成
  3. ユーザーが、SPからSAMLリクエストを受け取る
  4. IdP(Auth0)がユーザーを認証
  5. IdPがSAMLレスポンスを生成
  6. ユーザーが、IdPからSAMLレスポンスを受け取る
  7. SPがSAMLレスポンスを受け取り、検証
  8. SAMLレスポンスの内容に問題がなければ、ユーザーがSPにログインした状態になる。

厳密にはcybozu.comなのですが、以後kintoneと表記を統一します。

Auth0にkintoneを登録する

Auth0をIdPとし、そこにkintoneをSPとして設定するため、以下の手順に沿って必要となる情報を登録します。
IdPとなるテナントは、Auth0の新規サインアップ時に作成済みということを前提に進めます。

Applicationの新規作成(Auth0)

作成済みのテナントに対して、Applicationを新規作成します。

このあたりの手順は某ブログの会社さんが非常にわかりやすく記事を書いてくれています。
「TenantA(SAML IdPテナント)を設定する」を参考に作成します。
Auth0をSAML Identity Provider/SAML Service Providerとして使う #Auth0JP
わたしはApplication名を「kintone-SSO-Integration」としています。

kintoneでは証明書はX.509形式のみとフォーマットが固定されているので、Auth0から証明書をDLする時にはPEMでDLしておくようにします。

併せて、Endpointsタブの中にある SAML Protocol URL をコピーし、一時的にどこかに記録しておきます。
この情報をkintoneでSAMLを設定する際に使用します。

SSO用のユーザーを作成(Auth0)

今回はAuth0のユーザーを使ってSSOを行います。
左メニューの Users & Roles > Usersを開き「CREATE USER」をクリックします。

ユーザーを作成します。

「CREATE」をクリックすると、ユーザー作成時に登録したメールアドレス宛にアカウントを認証するためのメールが送信されます。
「VERIFY YOUR ACCOUNT」をクリックして認証を完了させます。

わたしの環境だとspam判定くらって初回がinboxに入ってなかったので、メール届いてないかも?と思ったらspam判定されてフィルタリングされてないかチェックしてみて下さい。

SAMLの設定を有効にする(kintone)

kintoneにログインします。
cybozu.com共通管理 > ログインのセキュリティ設定の中にある「SAML認証を有効にする」にチェックを入れます。
ここでApplicationの新規作成(Auth0)で一時的に保存しておいた、SAML Protocol URL をコピペし、DLしておいた証明書をアップロードします。

この後、Auth0とkintoneを紐付けますが、この時に必要な情報をメタデータとして入手することが可能です。
「Service Providerメタデータのダウンロード」をクリックすると、xmlファイル形式でDLされます。

メタデータとしてはこんな感じになってます。
entityIDのパラメータと、Locationのパラメータを使って設定していきます。

<?xml version="1.0" encoding="UTF-8"?>  
<md:EntityDescriptor entityID="https://example.cybozu.com" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"><md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat><md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://example.cybozu.com/saml/acs" index="0"/></md:SPSSODescriptor></md:EntityDescriptor>  

AplicationにAddonsを設定(Auth0)

作成したApplicationに、Addonsを設定します。

「SAML2 WEB APP」をクリックします。

下図のようになるように設定します。

ここでさきほどのメタデータを使用します。

  • メタデータ中にあるAssertionConsumerService から始まる Location フィールドの値を Application Callback URL フィールドに貼り付け
  • Settings の audience の値を編集。コメントアウトを解除し、メタデータ中のEntity ID 値で上書き
  • kintone へのログインは、NameIDでユーザーを識別するため、Auth0のメールアドレスをユーザー識別子として登録。mappings の値を以下の通り編集
// 末尾をデフォルトの emailaddress から nameidentifier に変更が必要  
 "mappings": {  
    "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"   
  },  

設定が完了したら、DEBUGを行います。
DEBUGが実行されたら、Decoded SAML Response で NameIDの部分がAuth0で登録したメールアドレスを返していることを確認します。

<saml:Subject>  
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">[email protected]****</saml:NameID>  

該当ユーザーのログイン名を変更(kintone)

kintoneのユーザー名を、Auth0で設定したユーザーのメールアドレスと一致させます。
ここが一致していないと、SSOでログインすることができません。

設定ができたらSSOでログインできるか確認

この状態で、kintoneのログイン画面にアクセスすると、リダイレクトがかかり、Auth0のサインイン画面が表示されます。
https://example.cybozu.com
ここでAuth0で登録したアカウント情報を入力します。

正常にkintoneにログインできれば成功です。

SAML認証のテスト中にSSOに失敗してログインできない時

SAML認証のテスト中でkintoneのログイン画面が表示されなくなった時は、URLに「saml=off」パラメーターをつけると通常のログイン画面が出てくるので、トライアンドエラーを繰り返しましょう。
https://example.cybozu.com/login?saml=off

おわりに

実はこの検証、SSOのみでSLOを考慮できてません。
なのでログアウト後のリダイレクト先を正しく指定できていなかったら以下のようにエラーになります…これはまた時間ある時にでもやろう。

キャプチャ粗すぎるから撮り直したいな。。。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

꒰๑•௰•๑꒱ITなんでも屋さんのメモ置き場とか戯言とか。おしごと ▷ 今InsideSalesとかMarketingとか꒰๑•௰•๑꒱

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう