SaaS

Slackのusernameが原因でプロビジョニングできない場合の対応方法(よくあるお問合せ-Okta編)

こんにちは!たつみんです。

今日はOktaからSlackへのプロビジョニングでエラーが発生して躓いてしまったのでその原因と対応方法について記事にします。

はじめに

実際に弊社の入社予定者の方のアカウントを準備中にプロビジョニングにて以下のような内容でエラーが発生し、Slackにアカウントが作成されていませんでした。

エラー内容をみるとError executing createNewUser: Conflict"Errors":{"description":"username_taken (username=<ユーザー名>)"という部分が怪しそうです🤔

原因

結論から言ってしまうと、Slackテナント内で一意であるべきUsernameが重複しているためにエラーが発生してしまいます。この一意であるというのは、解除済みユーザーのUsernameも含めて重複NGでです。またちょっと盲点なんですが、チャンネル名との重複もNGです。

今回はチャンネル名との重複はなさそうなので既存のUsernameとの重複が考えられます。

SlackのUsernameについて

Slack Usernameはプロフィールの氏名や表示名とは別のものであり、ユーザーが普段目にしたり意識するものではないものではありません。調べてみるとこのUsernameは2018年まではAPIでのメンションなどに利用されてきたものとのことでした。詳細について確認したい方は以下のSlack公式ドキュメントをご確認ください。

自分のUsernameはアカウント設定から確認することができます。ただしOktaとSlackがすでにSSO連携済みの場合はSlack側の設定によっては、Slack管理者のみ自分自身のUsernameを確認することができます。

Okta マッピング設定

このUsernameがどのように設定されているかを確認すると、Oktaのマッピング設定でSlack Usernameは以下の数式が設定されていました。

String.substringBefore(user.email, "@")

これは、Oktaユーザーのメールアドレスのローカルパート部分(@マークより前の部分)を指定している状態です。ドメイン部分を考慮していないため、メールアドレス全体としては異なる値であってもローカルパート部分が同一である場合に今回のエラーを引き起こします。

解決策

ドメイン部分も考慮すれば一意な値になるだろうという期待から次のような対策を考えました。

Slack usernameをメールアドレスのローカルパート部分にドメイン部分の先頭2文字を追加することで重複を防ぐことを考えました。

具体的にはOktaのプロビジョニング設定からSlack Usernameのマッピング設定で以下の式を設定しました。Slack Usernameが利用できない@については_に変換しています。

String.join("",substringBefore(user.email, "@"), "_" , substring(substringAfter(user.email, "@"),0,2))

以下のように設定し、プレビューでどのような値に変換されるかを確認することができます。

新たな課題

Slack Usernameは21文字以下でなければなりません。先ほどの設定ではローカルパート部分が長い場合は別のエラーを発生させてしまうことがわかりました。

あえてローカルパート部分を21文字以上のユーザーを作って検証してみた結果が以下です。

今度はError executing createNewUser: Bad Request"Errors":{"description":"username_too_long (username=<ユーザー名>)"というエラー内容が表示されました。Usernameが長すぎると言われてしまっていますね😩

さらなる解決策

今回は@を_に変換した上で、先頭から21文字までを抽出する式をSlack Usernameのマッピング設定に追加しました。具的には以下の式です。

String.substring(String.replace(user.email,"@","_" ),0,20)

これで重複の可能性を抑えつつ21文字以下という制限をクリアできます。

最後に

今回エラー内容からSPであるSlackの仕様を確認し、どう対応すべきか考えてみました。

SlackのUsernameについては現在はほぼ利用されていないとのことなのでこの部分が引っかかってしまうのは辛いなと感じました。また、21文字以下という制約や@マークが使えないので一意であるメールアドレスをそのまま利用できない点もハマりポイントでした。

Oktaでは属性値をマッピングする際に柔軟に値を変更を行うことができるため、今回のようなケースでも対応が可能です。今回ご紹介した数式以外にも様々なものが用意されています。詳しい内容については以下のOkta公式ドキュメントをご参照ください。

それではまた別の記事で〜👋

たつみん

事業会社の情シスからクラウドネイティブにJoin!
好きなものはF1海外観戦とベルギービール!
集中力の質は深く長く遅い典型的なシングルタスクタイプです。