Auth0を使ってZendeskのユーザー属性を追加してみました

2021.09.17

コンニチハ、千葉県民です。

上記記事の続きであります。

ZendeskがSAML認証システムに求めるユーザーデータは、ユーザーの姓名とメールアドレスだけですが、

より多くのデータを追加で渡してみようと思います。

Zenデスク公式の情報によると、サポートしているユーザー属性は

追加のユーザーデータを取得する に記載されているもの

InCommon Federation Attributes

とのことです。

本記事では追加属性を以下に決めてZendeskに連携してみます。

  • organizations: ユーザーが所属する組織の名前またはID
  • phone: 文字列として指定された電話番号,
  • role: ユーザーのロール。end-user、agent、またはadminを設定できます,
  • tags: ユーザーに設定されているタグ。これらのタグは、ユーザープロフィール内にすでにタグがある場合、それらのタグを上書きします,
  • remote_photo_url: ユーザープロフィールに設定される写真のURL
  • user_field_graphic_board: Zendesk Supportのカスタムユーザーフィールドの値

前回の記事で作成したSSO integrationによりAuth0を使用したSAMLログインできるようになっているので、 ログイン処理をカスタマイズして属性を追加してみましょう。

Auth0でSAMLの設定をカスタマイズする方法にはRulesを使用します。 ※ 執筆時点で、Actionsでは出来なそうでした(ドキュメントに記載がない)

追加属性ですが、今回はやりやすいようにuser_metadataに指定します。

Auth0ダッシュボードにログインし、ユーザーの編集画面から設定しましょう。

(user_metadataの例)

{
  "organizations": [
    "ロンド・ベル"
  ],
  "phone": "01203335555",
  "role": "admin",
  "tags": [
    "ジェガン",
    "バンシィ"
  ],
  "user_field_graphic_board": "GeForce GTX 1660 SUPER VENTUS XS OC",
  "givenname": "亮介",
  "surname": "森"
}

user_metadataを追加した後は、 Ruleを作成し、中身を以下のようにします

function (user, context, callback) {
  if(context.clientID !== '<<前回の記事で作成したSSOインテグレーションのclient id>>'){
    return callback(null, user, context);
  }

  user.user_metadata = user.user_metadata || {};

  const organizations = user.user_metadata.organizations.join(',');
  const tags = user.user_metadata.tags.join(',');

  user.organizations = organizations;
  user.tags = tags;

  context.samlConfiguration.mappings = {
    "organizations": "organizations",
    "phone": "user_metadata.phone", 
    "role": "user_metadata.role", 
    "tags": "tags", 
    "remote_photo_url": "picture",
    "user_field_graphic_board": "user_metadata.user_field_graphic_board", 
  };

  return callback(null, user, context);
}

※ エラーハンドリングをしていないので注意

この状態で再度Zendeskにログインすると、追加した属性でZendeskのユーザー情報が更新されます。

Before

after

どういったSAMLのやりとりがされたかは、SAML-tracerで確認できます。

Auth0のRule(NodeJS)を使って柔軟にカスタマイズできるので、別のDBに蓄積した顧客の属性なんかもZendeskに連携できます。

是非試してみてください