Azure AD の kintone 連携 (Application Gallery)


開発者にとっての Microsoft Azure Active Directory

こんにちは。

Azure AD の SAML フェデレーションで、kintone が選べることをご存じでしょうか?
以前 Google Apps については紹介しましたが、先日の拡張で 50 以上のアプリについて SAML フェデレーションが可能になりました。

他アプリでは、SSO のために、有償版の契約やカスタムドメインの取得(レジストラ登録)などが必要な場合が多いのですが、昨日の kintone – Azure ハンズオン でも紹介させていただいた通り、kintoneの場合、面倒な準備は不要で、すぐにフェデレーションできる (First start できる) ので、SAML による Federation をすぐに試したい方にもおすすめです。(以下、kintone の利用環境作成も含め、15分もあれば完了します。)
今回は、この kintone と Azure AD のフェデレーションについて手順を記載しておきます。

なお、kintone – Azure ハンズオンは今後も予定しています。

 

kintone 試用版の登録と SAML の有効化

まず、kintone やその開発環境をもっていない方は、kintone の 30 日間試用版などに登録して kintone が使えるようにしておいてください。試用版は無料で、3 – 5 分程度で使えるようになります。

なお、現在 (2014/11)、このフェデレーションを試す場合には、日本版 ではなく 北米版 を使用してください。(実はドメインが異なっています。) kintone の北米版のサイト (https://www.kintone.com) で [Sign up for free trial] ボタンを押して必要事項を入力すると、試用版が使えるようになります。
現在 (2014/11)、この機能は北米ユーザーを対象にリリースされているようですが、この制約は、いずれ解消されるかと思います。(日本の cybozu.com ドメインを使用している方の設定方法については、後述で補足します。)

以前は北米の kintone ドメイン (kintone.com) しかフェデレーションできませんでしたが、現在 (2015/02/23 以降)、日本の kintone のドメイン (cybozu.com) でも下記をお試しいただけます。

また、kintone 上で SAML による SSO を扱えるように Enterprise 機能の有効化をおこなっておいてください。(すでに有効化されている場合は無視してください。)
これも、試用版の範囲で使えます。

  • kintone Store (https://store.kintone.com/、北米版) にログインします
  • [Services License] タブをクリックして、[Free Trial] ボタンを押します
  • [enterprise features] のチェックボックスを選択します

 

Azure AD へのアプリケーション登録

フェデレーションを構成するには、Microsoft Azure Active Directory (Azure AD) 側にアプリケーションを登録し、kintone 側では IdP の構成をおこないます。
まずは前者を設定しましょう。

Microsoft Azure Management Portal を開いて、下記手順で Azure AD のアプリケーションを作成します。

  • Azure AD のテナントを表示して [Applications] (アプリケーション) タブをクリックして、[Add] (追加) ボタンを押します。
  • つぎのウィザードで、[Add an application from gallery] (ギャラリーからアプリケーションを追加) を選択します。
  • つぎのウィザードで、[kintone] を選択します。(検索ボックスに「kintone」と入力するとすぐに検索できます)
  • kintone のアプリが登録されたら、表示される画面で [Configure single sign-on] (シングルサインオンの構成) をクリックします。
  • つぎのウィザードで、[Windows Azure AD Single Sign-On] (Windows Azure AD のシングル サインオン) を選択します。
  • つぎのウィザードの [kintone Sign In URL] (Kintone サインイン URL) には、kintone のテナント URL (例 https://xxxxx.kintone.com) を入力します。(https://xxxxx.kintone.com/k/ ではありませんので注意してください。)
  • 表示される画面で、[Remote login URL] (リモート ログイン URL)、[Remote logout URL] (リモート ログアウト URL) の文字列をメモ帳などにコピーし、証明書をダウンロードして、この構成を終了します。

 

kintone 側の構成

つぎに、kintone 側の SAML フェデレーションの構成をおこないます。

以下の手順で実施します。

  • kintone のテナント (https://xxxxx.kintone.com) に Administrator でログインします。
  • ログイン後、[Administration] ボタンをクリックして管理画面を表示します。
  • 左のナビゲーションから [System Administration] (システム管理) – [Security] (セキュリティ) – [Login] (ログイン) を選択して設定画面を表示します。
  • 表示される画面で [Enable SAML authentication] (SAML 認証を有効にする) を選択し、以下の通り設定します。
    • [Login URL] に、上記で (メモ帳などに) コピーした Remote login URL を入力します
    • [Logout URL] に、上記で (メモ帳などに) コピーした Remote logout URL を入力します
    • [Certificate] に、上記でダウンロードした証明書を添付 (アップロード) します
  • [Save] (保存) ボタンを押して設定を保存します。

補足 : Federation (SAML SSO) を構成したあとで kintone のテナント管理者でログインするには、https://xxxxx.kintone.com/login?saml=off (日本ユーザーの場合は https://xxxxx.cybozu.com/login?saml=off) にアクセスします。

 

User の割り当て

さいごに、このフェデレーション (SSO など) を使えるユーザーを割り当てます。

Google Apps のときには、Sync (同期) 機能を使うことができ、Assign したユーザーを自動的に Google Apps のテナントに登録することができました。kintone では、自身で kintone の管理画面から User の新規登録をおこない、ライセンスを割り当ててください。(下図)

この際、必ず、[Login Name] (ログイン名) に、Azure AD 側のユーザー IDを登録します。(他の属性は自由に設定して構いません。) また、パスワードは何でも構いません。(フェデレーションの際には無視されます。)

 

動作確認

ブラウザーをすべて閉じ、kintone のテナント (https://xxxxx.kintone.com/) にアクセスすると、リダイレクトされて Azure AD のログイン画面が表示されます。
ここで、上記で割り当てたユーザーの ID / Password を入力すると、kintone に戻されて、ログインが完了します。

例えば、Google Apps とフェデレーションしているテナントで kintone も設定しておくと、GMail にログインする際に Azure AD のログイン画面が表示され、ログインして GMail を表示したあと、同じブラウザーでそのまま kintone が使えます。つまり、これらの登録されたアプリケーション間で Single Sign-On (SSO) のエクスペリエンスが提供されます。

Google、Salesforce、Box、kintone など、SAML (フェデレーション) に対応したさまざまなアプリケーションを設定することで、Azure AD を中心として統一的な ID 環境が構築できます。

 

2015/02/23 : 上記は、日本の kintone ドメイン (cybozu.com) でも対応されました。下記設定は不要です。

[ご参考] cybozu.com ドメイン (日本の kintone 利用者) の場合の設定方法

上記の通り、ギャラリーで登録されている kintone を追加すると、現時点 (2014/11) では、Azure AD に「https://*.kintone.com」の ServicePrincipal Name を設定します。
つまり、日本で kintone をお使いの方 (cybozu.com ドメインをお使いの方) は、この方法を使っても、ドメインが異なるためフェデレーションできません。(これについては、今後、対応されると思います。あくまでも現時点での状況です。)

でも安心してください。ギャラリーはあくまでも設定を簡素化しているだけであり、画面やコマンド (Windows PowerShell) を使って設定すれば cybozu.com ドメインについても SAML によるフェデレーションが可能です。
以下に、その手順を補足説明します。

まず、Azure Management Portal の Azure Active Directory の管理画面で [Applications] (アプリケーション) を選択して [Add] (追加) ボタンを押してアプリケーションの追加をおこないます。
今回は、以下の通り設定します。

  • まず最初に、上記の [Add an application from gallery] (ギャラリーからアプリケーションを追加) を選択するのではなく、今回は、[Add an application my organization is developing] (組織で開発中のアプリケーションを追加) を選択します。
  • つぎの画面で、[Web Application and/or Web API] (Web アプリケーションや WEB API) を選択します。
  • つぎの画面で、[Sign-On URL] (サインオン URL)、[App ID URI] (アプリケーション ID/URI) の双方に、使用している kintone の Tenant URL (https://xxxxx.cybozu.com など) を設定してください。(xxxxx の部分は、各自のテナントのアドレスです)

つぎに、kintone にログインして、上述と同様の SAML 設定をおこないます。

  • [cybozu.com 共通管理] で管理画面を表示して、ナビゲーション メニューから [システム管理] – [セキュリティ] – [ログイン] を選択します。
  • 表示される画面で [SAML認証を有効にする] を選択 (オン) します。
  • ログイン URL (下図の [Identity ProviderのSSOエンドポイントURL])、ログアウト URL (下図の [cybozu.comからのログアウト後に遷移するURL]) と証明書を設定します。

なお、エンドポイント URL (ログイン URL、ログアウト URL) は、Azure Management Portal で取得できます。(Azure AD の Application 管理画面で [View Endpoints] (エンドポイントの表示) をクリックすると表示されます。下図参照)
また、証明書も、上記と同じものを使用すれば OK です。

注意 : 一度設定すると、Azure AD へのログインが必要になりますが、管理者でログインしたい場合は https://xxxxx.cybozu.com/login?saml=off にアクセスしてください。

さいごに、上記同様、kintone 側にライセンスを割り当てるユーザーを登録しておきますが、ここで、一点、問題があります
 
kintone では NameIDPolicy として urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified を (Azure AD に) 渡します。その結果、Azure AD は、NameID として、フェデレーション専用の予測不可能な識別子 (正確には、Application と User で一意に生成される pairwise identifier) を kintone に渡します。(これは Azure AD の既定の動作です。)
kintone は、Azure AD から渡されたこの NameID と同じログイン名 (Login Name) のユーザーが登録されているか確認します。このため、今回の場合、この予測不可能な識別子をログイン名 (Login Name) として持つユーザーをあらかじめ kintone に登録しておく必要があります。(なお、上記の Gallery を使ったフェデレーションでは、内部で emailAddress 形式の NameID を渡しているので問題とはなりません。)
「予測不可能」と書いた通り、この識別子 (pairwise identifier) は、セキュリティ上の理由から、画面や API から取得できないようになっており、実際にユーザー ID / パスワードを入力してフェデレーションさせないと、アプリケーション側で取得できません。
さて、困りました。。。

1 つの解決方法としては、フェデレーションを使った別のカスタム アプリケーション (kintone とは別のアプリケーション) を構築するなどして、識別子をこのカスタム アプリケーションで取得して処理するという方法があります。(ただし、Azure AD に別のアプリケーションとして登録しないでください。アプリケーションが変わると、識別子も異なります。)
具体的には、専用のカスタム アプリケーションを構築して、このカスタム アプリケーションの URL を、Azure AD の上記のアプリケーションの Redirect URL として追加します。(Redirect URL は複数登録できます。) 例えば、ユーザー (利用者) が OpenID Connect を使ってログインをおこなうと、「Azure AD の OpenID Connect サポート」で解説したフローで id_token を取得できますが、この id_token の JWT に含まれる sub の値 (下記) は上述の識別子 (SAML の NameID) と同じになっています。こうして、このアプリケーションで、値を取り出して処理 (kintone へのユーザー登録など) が可能です。

(と、書いては見たものの、ちょっと面倒ですね。やはり、対応されるのを待ちましょう。。。)

{
  “aud”:”f5b75e7d-cf79-4e0a-87a6-e9b05f364ee4″,
  “iss”:”https://sts.windows.net/59e5fa8d-9bb6-4dfb-a882-899592497192/”,
  “iat”:1415676686,”nbf”:1415676686,
  “exp”:1415680586,
  “ver”:”1.0″,
  “tid”:”59e5fa8d-9bb6-4dfb-a882-899592497192″,
  “amr”:[“pwd”],
  “oid”:”1f1647f8-f075-4276-87ec-1a8f8e81161d”,
  “upn”:”demouser01@aadsample.onmicrosoft.com”,
  “unique_name”:”demouser01@aadsample.onmicrosoft.com”,
  “sub”:”MznOvf17nvAZHp8lbi6w5OgQBRHtgoDX3dkCN5rVEo4″,
  “family_name”:”Demo”,
  “given_name”:”Taro”,
  “nonce”:”abcdef…”,
  “c_hash”:”36dHlYde6aLb_f-Mfbfqmw”,
  “pwd_exp”:”6595439″,
  “pwd_url”:”https://portal.microsoftonline.com/ChangePassword.aspx”
}

Comments (0)

Skip to main content