+.(どωり)日々徒然技術LOG.+。+.(どωり)日々徒然技術LOG.+。꒰๑•௰•๑꒱ITなんでも屋さんのメモ置き場とか戯言とか。qiitaをけっこう使っていたのですが、ちょっと前にQrunchのアカウントを作成したこともあり、せっかくの機会なのでこちらに投稿します。この記事は、数年くらい前にやりかけて挫折したものを、Auth0を使って実現したものです。Server立ち上げて日本語化してみた当時はADFS環境をいかにして実現するかというところでいろいろAWS上で試行錯誤して結局壁にぶち当たったまま虚しい時間だけが過ぎていました。(今となってはなんであんなに頑張ってやろうと思ってたのかもはや思い出せないレベル...実はkintoneでSSOしたい!という声は周りでもちらほら聞きます。上にある記事も化石ばりに古いという。Network最近はIDaaSもいろいろ増えてきて、手軽に認証基盤を使えるようになりました。そこで、個人的にだいぶ前から試してみようと思っていたAuth0を使って今回SSOを実装してみたいと思います。https://auth0.com/jp/Auth0の新規サインアップAuth0自体の説明は有識者がたくさんブログでアウトプットしてくれてるので省略します。新規サインアップテナント作成の部分は以下のqiitaの記事がすごく参考になります。ウィザード形式に沿って設定を進めるだけでサインアップは完了します。無料トライアルを試してみようkintoneの新規サインアップ(30日間無料お試し)今回はテストなので、30日間の無料お試し環境を取得します。https://kintone.cybozu.co.jp/trial/kintoneにおけるSSOの構成について今回はAuth0をIdPとして利用し、kintone(cybozu.com)はSPとしての役割を果たします。IdP(Auth0)とSP(cybozu.com)、ユーザーの相関関係は以下の通り。cybozu.comヘルプフローについてはサイトから抜粋(図もお借りしました)ユーザーがSP(cybozu.com)にアクセスSPがSAMLリクエストを生成ユーザーが、SPからSAMLリクエストを受け取るIdP(Auth0)がユーザーを認証IdPがSAMLレスポンスを生成ユーザーが、IdPからSAMLレスポンスを受け取るSPがSAMLレスポンスを受け取り、検証SAMLレスポンスの内容に問題がなければ、ユーザーがSPにログインした状態になる。厳密にはcybozu.comなのですが、以後kintoneと表記を統一します。Auth0にkintoneを登録するAuth0をIdPとし、そこにkintoneをSPとして設定するため、以下の手順に沿って必要となる情報を登録します。IdPとなるテナントは、Auth0の新規サインアップ時に作成済みということを前提に進めます。Applicationの新規作成(Auth0)作成済みのテナントに対して、Applicationを新規作成します。このあたりの手順は某ブログの会社さんが非常にわかりやすく記事を書いてくれています。IdPテナント)を設定する」を参考に作成します。#Auth0JPわたしはApplication名を「kintone-SSO-Integration」としています。kintoneでは証明書はX.509形式のみとフォーマットが固定されているので、Auth0から証明書をDLする時にはPEMでDLしておくようにします。コピーし、一時的にどこかに記録しておきます。この情報をkintoneでSAMLを設定する際に使用します。SSO用のユーザーを作成(Auth0)今回はAuth0のユーザーを使ってSSOを行います。USER」をクリックします。ユーザーを作成します。「CREATE」をクリックすると、ユーザー作成時に登録したメールアドレス宛にアカウントを認証するためのメールが送信されます。ACCOUNT」をクリックして認証を完了させます。わたしの環境だとspam判定くらって初回がinboxに入ってなかったので、メール届いてないかも?と思ったらspam判定されてフィルタリングされてないかチェックしてみて下さい。SAMLの設定を有効にする(kintone)kintoneにログインします。ログインのセキュリティ設定の中にある「SAML認証を有効にする」にチェックを入れます。コピペし、DLしておいた証明書をアップロードします。この後、Auth0とkintoneを紐付けますが、この時に必要な情報をメタデータとして入手することが可能です。Providerメタデータのダウンロード」をクリックすると、xmlファイル形式でDLされます。メタデータとしてはこんな感じになってます。entityIDのパラメータと、Locationのパラメータを使って設定していきます。index="0"/></md:SPSSODescriptor></md:EntityDescriptor>AplicationにAddonsを設定(Auth0)作成したApplicationに、Addonsを設定します。APP」をクリックします。下図のようになるように設定します。ここでさきほどのメタデータを使用します。ログインは、NameIDでユーザーを識別するため、Auth0のメールアドレスをユーザー識別子として登録。},設定が完了したら、DEBUGを行います。NameIDの部分がAuth0で登録したメールアドレスを返していることを確認します。Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">dolly+auth0@****</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を考慮できてません。ログアウト後のリダイレクト先を正しく指定できていなかったら以下のようにエラーになります...これはまた時間ある時にでもやろう。キャプチャ粗すぎるから撮り直したいな。