方法: エンタープライズ アプリケーションの SAML トークンで発行された要求のカスタマイズHow to: customize claims issued in the SAML token for enterprise applications

現在、Microsoft ID プラットフォームによるシングル サインオン (SSO) は、Azure AD アプリ ギャラリー内の事前統合済みアプリケーションと、カスタム アプリケーションを含め、ほとんどのエンタープライズ アプリケーションでサポートされています。Today, Microsoft identity platform supports single sign-on (SSO) with most enterprise applications, including both applications pre-integrated in the Azure AD app gallery as well as custom applications. ユーザーが Microsoft ID プラットフォームで SAML 2.0 プロトコルを使ってアプリケーションへのユーザー認証を行うと、Microsoft ID プラットフォームは、(HTTP POST を使用して) アプリケーションにトークンを送信します。When a user authenticates to an application through Microsoft identity platform using the SAML 2.0 protocol, Microsoft identity platform sends a token to the application (via an HTTP POST). その後、アプリケーションがトークンを検証し、ユーザー名とパスワードの入力を求める代わりに、検証済みのトークンを使用してユーザーをログオンします。And then, the application validates and uses the token to log the user in instead of prompting for a username and password. これらの SAML トークンには、"要求" と呼ばれる、ユーザーに関する情報が含まれています。These SAML tokens contain pieces of information about the user known as claims.

要求とは、そのユーザーに発行するトークンの中にあるユーザーに関する ID プロバイダーが提示した情報を指します。A claim is information that an identity provider states about a user inside the token they issue for that user. SAML トークンでは、通常、このデータは SAML 属性ステートメントに含まれています。In SAML token, this data is typically contained in the SAML Attribute Statement. ユーザーの一意の ID は通常、名前識別子とも呼ばれる SAML サブジェクトで表されます。The user’s unique ID is typically represented in the SAML Subject also called as Name Identifier.

既定では、Microsoft ID プラットフォームにより、ユーザーを一意に識別できる Azure AD のユーザー名 (別名: ユーザー プリンシパル名) を値として持つ NameIdentifier 要求を含む SAML トークンがアプリケーションに対して発行されます。By default, Microsoft identity platform issues a SAML token to your application that contains a NameIdentifier claim with a value of the user’s username (also known as the user principal name) in Azure AD, which can uniquely identify the user. また、SAML トークンには、ユーザーの電子メール アドレス、姓名を含むその他の要求も含まれています。The SAML token also contains additional claims containing the user’s email address, first name, and last name.

アプリケーションに対して SAML トークンで発行された要求を表示または編集するには、Azure Portal でアプリケーションを開きます。To view or edit the claims issued in the SAML token to the application, open the application in Azure portal. 次に、 [ユーザー属性とクレーム] セクションを開きます。Then open the User Attributes & Claims section.

Azure portal で [ユーザー属性とクレーム] セクションを開く

SAML トークンで発行された要求を編集する必要がある理由は、2 つ考えられます。There are two possible reasons why you might need to edit the claims issued in the SAML token:

  • アプリケーションで、NameIdentifier 要求または NameID 要求が、Azure AD に格納されているユーザー名 (またはユーザー プリンシパル名) 以外のものである必要がある。The application requires the NameIdentifier or NameID claim to be something other than the username (or user principal name) stored in Azure AD.
  • アプリケーションが、別の要求 URI または要求値のセットを必要とするように記述されている。The application has been written to require a different set of claim URIs or claim values.

NameID の編集Editing nameID

NameID (名前識別子の値) を編集するには:To edit the NameID (name identifier value):

  1. [名前識別子の値] ページを開きます。Open the Name identifier value page.

  2. 属性または属性に適用する変換を選択します。Select the attribute or transformation you want to apply to the attribute. 必要に応じて、NameID 要求の形式を指定できます。Optionally, you can specify the format you want the NameID claim to have.

    NameID (名前識別子の値) を編集する

NameID の形式NameID format

特定の形式の NameIDPolicy 要素が SAML 要求に含まれている場合、その要求の形式が Microsoft ID プラットフォームで使用されます。If the SAML request contains the element NameIDPolicy with a specific format, then Microsoft identity platform will honor the format in the request.

SAML 要求に NameIDPolicy 要素が含まれていない場合、指定した形式の NameID がMicrosoft ID プラットフォームによって発行されます。If the SAML request doesn't contain an element for NameIDPolicy, then Microsoft identity platform will issue the NameID with the format you specify. 形式を指定しないと、選択した要求ソースに関連付けられている既定のソース形式が使用されます。If no format is specified Microsoft identity platform will use the default source format associated with the claim source selected.

[名前識別子の形式の選択] ドロップダウンで、次のオプションのいずれかを選択できます。From the Choose name identifier format dropdown, you can select one of the following options.

NameID の形式NameID format 説明Description
[Default]Default 既定のソース形式が使用されます。Microsoft identity platform will use the default source format.
永続的Persistent NameID 形式として Persistent が使用されます。Microsoft identity platform will use Persistent as the NameID format.
EmailAddressEmailAddress NameID 形式として EmailAddress が使用されます。Microsoft identity platform will use EmailAddress as the NameID format.
未指定Unspecified NameID 形式として Unspecified が使用されます。Microsoft identity platform will use Unspecified as the NameID format.
Windows ドメインの修飾名Windows domain qualified name NameID 形式として WindowsDomainQualifiedName が使用されます。Microsoft identity platform will use WindowsDomainQualifiedName as the NameID format.

一時的な NameID もサポートされていますが、ドロップダウンでは選択できず、また、Azure 側で構成できません。Transient NameID is also supported, but is not available in the dropdown and cannot be configured on Azure's side. NameIDPolicy 属性について詳しくは、「シングル サインオンの SAML プロトコル」をご覧ください。To learn more about the NameIDPolicy attribute, see Single Sign-On SAML protocol.

属性Attributes

NameIdentifier (または NameID) 要求の必要なソースを選択します。Select the desired source for the NameIdentifier (or NameID) claim. 次のオプションから選択できます。You can select from the following options.

名前Name 説明Description
EmailEmail ユーザーの電子メール アドレスEmail address of the user
userprincipalNameuserprincipalName ユーザーのユーザー プリンシパル名 (UPN)User principal name (UPN) of the user
onpremisessamaccountonpremisessamaccount オンプレミスの Azure AD から同期された SAM アカウント名SAM account name that has been synced from on-premises Azure AD
objectidobjectid Azure AD でのユーザーの objectidObjectid of the user in Azure AD
employeeidemployeeid ユーザーの従業員 IDEmployee ID of the user
ディレクトリ拡張機能Directory extensions Azure AD Connect 同期を使用してオンプレミスの Active Directory から同期されたディレクトリ拡張機能Directory extensions synced from on-premises Active Directory using Azure AD Connect Sync
拡張属性 1 ~ 15Extension Attributes 1-15 Azure AD のスキーマを拡張するために使用されるオンプレミスの 拡張機能属性On-premises extension attributes used to extend the Azure AD schema

詳しくは、「表 3: ソースごとに有効な ID 値」をご覧ください。For more info, see Table 3: Valid ID values per source.

また、Azure AD で定義したあらゆるクレームに定数 (静的) 値を割り当てることができます。You can also assign any constant (static) value to any claims which you define in Azure AD. 定数値は次の手順で割り当ててください。Please follow the below steps to assign a constant value:

  1. Azure portal[User Attributes & Claims](ユーザー属性とクレーム) セクションで、編集アイコンをクリックしてクレームを編集ます。In the Azure portal, on the User Attributes & Claims section, click on the Edit icon to edit the claims.

  2. 変更する必要があるクレームをクリックします。Click on the required claim which you want to modify.

  3. 組織に応じて [ソース属性] に引用符を付けずに定数値を入力し、 [保存] をクリックします。Enter the constant value without quotes in the Source attribute as per your organization and click Save.

    Azure portal の [Org Attributes & Claims](組織の属性と要求) セクション

  4. 定数値は次のように表示されます。The constant value will be displayed as below.

    Azure portal の [Edit Attributes & Claims](属性と要求の編集) セクション

特別な要求 - 変換Special claims - transformations

要求変換関数を使用することもできます。You can also use the claims transformations functions.

機能Function 説明Description
ExtractMailPrefix()ExtractMailPrefix() メール アドレスまたはユーザー プリンシパル名からドメイン サフィックスを除去します。Removes the domain suffix from either the email address or the user principal name. これにより、渡されたユーザー名の最初の部分のみが抽出されます (例: joe_smith@contoso.com ではなく "joe_smith" のみ)。This extracts only the first part of the user name being passed through (for example, "joe_smith" instead of joe_smith@contoso.com).
Join()Join() 属性を検証済みドメインと結合します。Joins an attribute with a verified domain. 選択したユーザー ID 値にドメインが含まれる場合、ユーザー名が抽出されて、選択された検証済みドメインが追加されます。If the selected user identifier value has a domain, it will extract the username to append the selected verified domain. たとえば、ユーザー ID 値としてメール アドレス (joe_smith@contoso.com) を選択し、検証済みドメインとして contoso.onmicrosoft.com を選択した場合、結果は joe_smith@contoso.onmicrosoft.com になります。For example, if you select the email (joe_smith@contoso.com) as the user identifier value and select contoso.onmicrosoft.com as the verified domain, this will result in joe_smith@contoso.onmicrosoft.com.
ToLower()ToLower() 選択した属性の文字を小文字に変換します。Converts the characters of the selected attribute into lowercase characters.
ToUpper()ToUpper() 選択した属性の文字を大文字に変換します。Converts the characters of the selected attribute into uppercase characters.

アプリケーション固有の要求の追加Adding application-specific claims

アプリケーション固有の要求を追加するには:To add application-specific claims:

  1. [ユーザー属性とクレーム] で、 [新しいクレームの追加] を選択して [ユーザー クレームの管理] ページを開きます。In User Attributes & Claims, select Add new claim to open the Manage user claims page.
  2. クレームの [名前] を入力します。Enter the name of the claims. 値は、SAML 仕様の URI パターンに厳密に従う必要はありません。URI パターンが必要な場合は、 [名前空間] フィールドに追加することができます。The value doesn't strictly need to follow a URI pattern, per the SAML spec. If you need a URI pattern, you can put that in the Namespace field.
  3. クレームの値が取得される [ソース] を選択します。Select the Source where the claim is going to retrieve its value. ソース属性のドロップダウンからユーザー属性を選択するか、または要求として生成する前にユーザー属性に変換を適用することができます。You can select a user attribute from the source attribute dropdown or apply a transformation to the user attribute before emitting it as a claim.

要求の変換Claim transformations

ユーザー属性に変換を適用するには、次の手順を行います。To apply a transformation to a user attribute:

  1. [要求の管理] で、要求ソースとして [変換] を選択して、 [変換の管理] ページを開きます。In Manage claim, select Transformation as the claim source to open the Manage transformation page.

  2. 変換ドロップダウンから関数を選択します。Select the function from the transformation dropdown. 選択した関数に応じて、変換内で評価するパラメーターと定数値を指定する必要があります。Depending on the function selected, you will have to provide parameters and a constant value to evaluate in the transformation. 使用可能な関数の詳細については、次の表を参照してください。Refer to the table below for more information about the available functions.

  3. 複数の変換を適用するには、 [変換の追加] をクリックします。1 つの要求に対して最大 2 つの変換を適用できます。To apply multiple transformation, click on Add transformation.You can apply a maximum of two transformation to a claim. たとえば、最初に user.mail のメール プレフィックスを抽出できます。For example, you could first extract the email prefix of the user.mail. 次に、文字列を大文字にします。Then, make the string upper case.

    複数の要求の変換

次の関数を使用して、要求を変換できます。You can use the following functions to transform claims.

機能Function 説明Description
ExtractMailPrefix()ExtractMailPrefix() メール アドレスまたはユーザー プリンシパル名からドメイン サフィックスを除去します。Removes the domain suffix from either the email address or the user principal name. これにより、渡されたユーザー名の最初の部分のみが抽出されます (例: joe_smith@contoso.com ではなく "joe_smith" のみ)。This extracts only the first part of the user name being passed through (for example, "joe_smith" instead of joe_smith@contoso.com).
Join()Join() 2 つの属性を結合することで、新しい値を作成します。Creates a new value by joining two attributes. 必要に応じて、2 つの属性の間に区切り記号を使用できます。Optionally, you can use a separator between the two attributes. NameID 要求の変換では、結合は検証済みドメインに制限されます。For NameID claim transformation, the join is restricted to a verified domain. 選択したユーザー ID 値にドメインが含まれる場合、ユーザー名が抽出されて、選択された検証済みドメインが追加されます。If the selected user identifier value has a domain, it will extract the username to append the selected verified domain. たとえば、ユーザー ID 値としてメール アドレス (joe_smith@contoso.com) を選択し、検証済みドメインとして contoso.onmicrosoft.com を選択した場合、結果は joe_smith@contoso.onmicrosoft.com になります。For example, if you select the email (joe_smith@contoso.com) as the user identifier value and select contoso.onmicrosoft.com as the verified domain, this will result in joe_smith@contoso.onmicrosoft.com.
ToLowercase()ToLowercase() 選択した属性の文字を小文字に変換します。Converts the characters of the selected attribute into lowercase characters.
ToUppercase()ToUppercase() 選択した属性の文字を大文字に変換します。Converts the characters of the selected attribute into uppercase characters.
Contains()Contains() 入力が指定した値と一致する場合、属性または定数を出力します。Outputs an attribute or constant if the input matches the specified value. 一致しない場合は、別の出力を指定できます。Otherwise, you can specify another output if there’s no match.
たとえば、ユーザーのメール アドレスに "@contoso.com" が含まれる場合はメール アドレスを値とする要求を出力し、それ以外の場合はユーザー プリンシパル名を出力するものとします。For example, if you want to emit a claim where the value is the user’s email address if it contains the domain “@contoso.com”, otherwise you want to output the user principal name. これを行うには、次の値を構成します。To do this, you would configure the following values:
Parameter 1 (入力) : user.emailParameter 1(input): user.email
Value: "@contoso.com"Value: "@contoso.com"
Parameter 2 (出力): user.emailParameter 2 (output): user.email
Parameter 3 (一致しない場合の出力): user.userprincipalnameParameter 3 (output if there's no match): user.userprincipalname
EndWith()EndWith() 入力が指定した値で終わっている場合、属性または定数を出力します。Outputs an attribute or constant if the input ends with the specified value. 一致しない場合は、別の出力を指定できます。Otherwise, you can specify another output if there’s no match.
たとえば、ユーザーの従業員 ID が "000" で終わっている場合は従業員 ID を値とする要求を出力し、それ以外の場合は拡張属性を出力するものとします。For example, if you want to emit a claim where the value is the user’s employee ID if the employee ID ends with “000”, otherwise you want to output an extension attribute. これを行うには、次の値を構成します。To do this, you would configure the following values:
Parameter 1 (入力) : user.employeeidParameter 1(input): user.employeeid
: "000"Value: "000"
Parameter 2 (出力): user.employeeidParameter 2 (output): user.employeeid
Parameter 3 (一致しない場合の出力): user.extensionattribute1Parameter 3 (output if there's no match): user.extensionattribute1
StartWith()StartWith() 入力が指定した値で始まっている場合、属性または定数を出力します。Outputs an attribute or constant if the input starts with the specified value. 一致しない場合は、別の出力を指定できます。Otherwise, you can specify another output if there’s no match.
たとえば、country/region が "US" で始まっている場合はユーザーの従業員 ID を値とする要求を出力し、それ以外の場合は拡張属性を出力するものとします。For example, if you want to emit a claim where the value is the user’s employee ID if the country/region starts with "US", otherwise you want to output an extension attribute. これを行うには、次の値を構成します。To do this, you would configure the following values:
Parameter 1 (入力) : user.countryParameter 1(input): user.country
: "US"Value: "US"
Parameter 2 (出力): user.employeeidParameter 2 (output): user.employeeid
Parameter 3 (一致しない場合の出力): user.extensionattribute1Parameter 3 (output if there's no match): user.extensionattribute1
Extract() - 一致の後Extract() - After matching 指定した値との一致より後の部分文字列を返します。Returns the substring after it matches the specified value.
たとえば、入力の値が "Finance_BSimon" で、一致する値が "Finance_" の場合、要求の出力は "BSimon" です。For example, if the input's value is "Finance_BSimon", the matching value is "Finance_", then the claim's output is "BSimon".
Extract() - 一致の前Extract() - Before matching 指定した値との一致より前の部分文字列を返します。Returns the substring until it matches the specified value.
たとえば、入力の値が "BSimon_US" で、一致する値が "_US" の場合、要求の出力は "BSimon" です。For example, if the input's value is "BSimon_US", the matching value is "_US", then the claim's output is "BSimon".
Extract() - 一致の間Extract() - Between matching 指定した値との一致より前の部分文字列を返します。Returns the substring until it matches the specified value.
たとえば、入力の値が "Finance_BSimon_US" で、1 番目の一致する値が "Finance_"、2 番目の一致する値が "US" である場合、要求の出力は "BSimon" です。For example, if the input's value is "Finance_BSimon_US", the first matching value is "Finance", the second matching value is "_US", then the claim's output is "BSimon".
ExtractAlpha() - プレフィックスExtractAlpha() - Prefix 文字列のプレフィックスのアルファベット部分を返します。Returns the prefix alphabetical part of the string.
たとえば、入力の値が "BSimon_123" の場合は、"BSimon" を返します。For example, if the input's value is "BSimon_123", then it returns "BSimon".
ExtractAlpha() - サフィックスExtractAlpha() - Suffix 文字列のサフィックスのアルファベット部分を返します。Returns the suffix alphabetical part of the string.
たとえば、入力の値が "123_Simon" の場合は、"Simon" を返します。For example, if the input's value is "123_Simon", then it returns "Simon".
ExtractNumeric() - プレフィックスExtractNumeric() - Prefix 文字列のプレフィックスの数字部分を返します。Returns the prefix numerical part of the string.
たとえば、入力の値が "123_BSimon" の場合は、"123" を返します。For example, if the input's value is "123_BSimon", then it returns "123".
ExtractNumeric() - サフィックスExtractNumeric() - Suffix 文字列のサフィックスの数字部分を返します。Returns the suffix numerical part of the string.
たとえば、入力の値が "BSimon_123" の場合は、"123" を返します。For example, if the input's value is "BSimon_123", then it returns "123".
IfEmpty()IfEmpty() 入力が null または空の場合、属性または定数を出力します。Outputs an attribute or constant if the input is null or empty.
たとえば、特定のユーザーの従業員 ID が空の場合は、extensionattribute に格納されている属性を出力するものとします。For example, if you want to output an attribute stored in an extensionattribute if the employee ID for a given user is empty. これを行うには、次の値を構成します。To do this, you would configure the following values:
Parameter 1 (入力): user.employeeidParameter 1(input): user.employeeid
Parameter 2 (出力): user.extensionattribute1Parameter 2 (output): user.extensionattribute1
Parameter 3 (一致しない場合の出力): user.employeeidParameter 3 (output if there's no match): user.employeeid
IfNotEmpty()IfNotEmpty() 入力が null または空ではない場合、属性または定数を出力します。Outputs an attribute or constant if the input is not null or empty.
たとえば、特定のユーザーの従業員 ID が空ではない場合は、extensionattribute に格納されている属性を出力するものとします。For example, if you want to output an attribute stored in an extensionattribute if the employee ID for a given user is not empty. これを行うには、次の値を構成します。To do this, you would configure the following values:
Parameter 1 (入力): user.employeeidParameter 1(input): user.employeeid
Parameter 2 (出力): user.extensionattribute1Parameter 2 (output): user.extensionattribute1

他の変換が必要な場合は、Azure AD のフィードバック フォーラムSaaS アプリケーション カテゴリで、アイデアをお送りください。If you need additional transformations, submit your idea in the feedback forum in Azure AD under the SaaS application category.

条件に基づいた要求の出力Emitting claims based on conditions

ユーザーの種類とユーザーが属するグループに基づいて、要求のソースを指定することができます。You can specify the source of a claim based on user type and the group to which the user belongs.

ユーザーの種類は次のとおりです。The user type can be:

  • 任意: すべてのユーザーはアプリケーションへのアクセスが許可されています。Any: All users are allowed to access the application.
  • メンバー: テナントのネイティブ メンバーMembers: Native member of the tenant
  • すべてのゲスト: ユーザーは、Azure AD の有無にかかわらず、外部の組織から移行します。All guests: User is brought over from an external organization with or without Azure AD.
  • AAD ゲスト: ゲスト ユーザーは、Azure AD を使用する別の組織に属します。AAD guests: Guest user belongs to another organization using Azure AD.
  • 外部のゲスト: ゲスト ユーザーは、Azure AD のない外部組織に属します。External guests: Guest user belongs to an external organization that doesn't have Azure AD.

これが役立つのは、クレームのソースが、ゲストとアプリケーションにアクセスする従業員とで異なる場合です。One scenario where this is helpful is when the source of a claim is different for a guest and an employee accessing an application. ユーザーが従業員である場合、NameID が user.email からソース化されるように指定できます。ただし、ユーザーがゲストの場合は、NameID は user.extensionattribute1 からソース化されます。You may want to specify that if the user is an employee the NameID is sourced from user.email, but if the user is a guest then the NameID is sourced from user.extensionattribute1.

要求条件を追加するには、次の手順を行います。To add a claim condition:

  1. [要求の管理] で、要求条件を展開します。In Manage claim, expand the Claim conditions.
  2. ユーザーの種類を選択します。Select the user type.
  3. ユーザーが属するグループを選択します。Select the group(s) to which the user should belong. 特定のアプリケーションに対するすべての要求で、最大 50 個の一意のグループを選択できます。You can select up to 50 unique groups across all claims for a given application.
  4. クレームの値が取得される [ソース] を選択します。Select the Source where the claim is going to retrieve its value. ソース属性のドロップダウンからユーザー属性を選択するか、または要求として生成する前にユーザー属性に変換を適用することができます。You can select a user attribute from the source attribute dropdown or apply a transformation to the user attribute before emitting it as a claim.

条件を追加する順序は重要です。The order in which you add the conditions are important. Azure AD では、条件を上から下に評価し、要求に出力する値を決定しています。Azure AD evaluates the conditions from top to bottom to decide which value to emit in the claim.

たとえば、Britta Simon は Contoso テナントのゲスト ユーザーです。For example, Britta Simon is a guest user in the Contoso tenant. 彼女は、同様に Azure AD を使用する別の組織に属しています。She belongs to another organization that also uses Azure AD. Fabrikam アプリケーションが次のように構成されている場合、Britta が Fabrikam にサインインしようとすると、Microsoft ID プラットフォームで次のように条件が評価されます。Given the below configuration for the Fabrikam application, when Britta tries to sign in to Fabrikam, Microsoft identity platform will evaluate the conditions as follow.

まず、Britta のユーザーの種類が All guests かどうかを確認します。First, Microsoft identity platform verifies if Britta's user type is All guests. これに当てはまるので、要求のソースが user.extensionattribute1 に割り当てられます。Since, this is true then Microsoft identity platform assigns the source for the claim to user.extensionattribute1. 次に、Britta のユーザーの種類が AAD guests かどうかを確認します。これも当てはまるので、要求のソースが user.mail に割り当てられます。Second, Microsoft identity platform verifies if Britta's user type is AAD guests, since this is also true then Microsoft identity platform assigns the source for the claim to user.mail. 最後に、Britta の値 user.mail を使用して要求が出力されます。Finally, the claim is emitted with value user.mail for Britta.

要求の条件付き構成

次のステップNext steps