みなさんこんばんわ。
Microsoft Entra IDでユーザーを作成していて気付いたことがあるので記事にします。
Microsoft公式からの詳細はこちらです。
https://learn.microsoft.com/ja-jp/entra/identity/hybrid/connect/plan-connect-userprincipalname
@の直前に.が使えない
@の前に@が使えない
こっちも分かりやすいですね。
@がアカウント名とドメインの区切り文字となっているので、アカウント名に@があるとどこが区切り文字化わからなくなるからですね。
.が連続だとダメ
t..est
という名前を付けてみました。
この場合だと、
ユーザー作成画面では何も出てこないのです。
確認画面でも何も出てこないので作成
ボタンも押せます。
しかしボタンを押してみると
エラーが出ます。
エラーの内容はリソース'User'のプロパティ'mailNickname'に無効な値が指定されました。
と出ています。
この文言の内容はどのパラメーターかというと
この赤枠部分でした。
しかしこのメール ニックネーム
なるパラメーター、プロパティ画面からは設定できません。
このようにプロパティ画面全部見直しても見当たりませんでした。
アカウント作成の最初の画面
赤枠内のユーザープリンシパルネームから受け継ぐ
のチェックを外せばメールニックネーム
を個別で設定変更ができました。
個別で設定するとやはり基本
のページでコケるようになりますね。
ユーザープリンシパルネーム(UPN)でコケています。
.が二つ続くこともあまりないと思いますが、気を付けましょう。
なぜ.が連続で2つ使うユーザー名が作成できないか
これはどうもSMTPの仕様の影響を受けているようです。
SMTPに関するRFC 5321内のセクション4.1.2 Command Argument SyntaxにあるLocal-partという個所で定義されています。
抜粋すると
Local-part = Dot-string / Quoted-string
MAY be case-sensitive
Dot-string = Atom *("." Atom)
Atom = 1*atext
この部分ですね。
この部分もABNF(拡張BNF)としてRFC 5234で定義されているのですがABNFまで話を広げてしまうと範囲が広くなりすぎるのでこの抜粋部分だけに絞ってみます。
抜粋部分を見てもらうとわかると思いますが、下から順に要素が入れ子になっていますので一番下から見ていきます。
Atom=1*atext
Atom=1*atext
ですが、これはatextを1回以上並べる
という意味です。
atextとは具体的に言うと
abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+=/?^_`{}|~.
となります。
これらの文字、特に記号に関しては驚きますが、例えば
michael+jackson
や
michael=jackson
というメールアドレスの@より前の部分がSMTPのRFCとしては許容されている、ということですね。
(もちろんMicrosoft Entra IDではこれらの命名は禁止です。)
次はその上の行です。
Dot-string=Atom *("." Atom)
Dot-string=Atom *("." Atom)
こちらもABNFに従って分解してみると
Dot-StringとはAtom(1*atext)が必ず最初(頭文字)に利用され、その次に.Atom(1*atext)をゼロ回以上繰り返す
という意味になります。
この定義だと例えば
文字列 | 有効/無効 |
---|---|
a | 有効 |
b | 有効 |
ab | 有効 |
abc | 有効 |
a.bc | 有効 |
a.b.c | 有効 |
a..bc | 無効 |
.abc | 無効 |
abc. | 無効 |
となります。
ここで.の連続利用と最初の文字に.、最後の文字に.が無効、と定義されていました。
まとめ
Microsoft Entra IDのユーザー名に.を二回連続で使ったり、.から始まる、.で終わる命名は使えない
所感
とても勉強になりました。
最近案件でRFCを読むことが増えたので、やはり先人達の偉大な知恵は良く考え抜かれているな、と感心しきりです。
私も少しでも世間のお役に立てるように頑張ろうと思いました。
本日はここまで。