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

現在、Azure Active Directory (Azure AD) では、Azure AD アプリ ギャラリーの事前統合済みアプリケーション、カスタム アプリケーションを含め、ほとんどのエンタープライズ アプリケーションで、シングル サインオン (SSO) がサポートされています。Today, Azure Active Directory (Azure AD) 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. ユーザーが Azure AD によって SAML 2.0 プロトコルを使ってアプリケーションに対して認証されると、Azure AD は、アプリケーションにトークンを送信します (HTTP POST 経由)。When a user authenticates to an application through Azure AD using the SAML 2.0 protocol, Azure AD 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.

既定では、Azure AD により、アプリケーションに対して、Azure AD でのユーザーのユーザー名 (別名: ユーザー プリンシパル名) を値に持つ NameIdentifier 要求を含む SAML トークンが発行され、ユーザーを一意に識別できます。By default, Azure AD 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

SAML 要求に、特定の形式を持つ NameIDPolicy 要素が含まれている場合、Azure AD では要求の形式が使用されます。If the SAML request contains the element NameIDPolicy with a specific format, then Azure AD will honor the format in the request.

SAML 要求に NameIDPolicy の要素が含まれていない場合、Azure AD では指定した形式の NameID が発行されます。If the SAML request doesn't contain an element for NameIDPolicy, then Azure AD will issue the NameID with the format you specify. 形式を指定しないと、Azure AD では、選択されている要求ソースに関連付けられている既定のソース形式が使用されます。If no format is specified Azure AD 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 Azure AD では、既定のソース形式が使用されます。Azure AD will use the default source format.
永続的Persistent Azure AD では、NameID の形式として "永続的" が使用されます。Azure AD will use Persistent as the NameID format.
EmailAddressEmailAddress Azure AD では、NameID の形式として "EmailAddress" が使用されます。Azure AD will use EmailAddress as the NameID format.
未指定Unspecified Azure AD では、NameID の形式として "未指定" が使用されます。Azure AD will use Unspecified as the NameID format.
一時的Transient Azure AD では、NameID の形式として "一時的" が使用されます。Azure AD will use Transient as the NameID format.

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.

EnableAdfsAuthenticationName 説明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 ユーザーの employeeidemployeeid 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.

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

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

FunctionFunction 説明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.

アプリケーション固有の要求 - 変換Application-specific claims - Transformations

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

FunctionFunction 説明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.
ToLower()ToLower() 選択した属性の文字を小文字に変換します。Converts the characters of the selected attribute into lowercase characters.
ToUpper()ToUpper() 選択した属性の文字を大文字に変換します。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.
たとえば、ユーザーの employeeid が "000" で終わっている場合は employeeid を値とする要求を出力し、それ以外の場合は拡張属性を出力するものとします。For example, if you want to emit a claim where the value is the user’s employeeid if the employeeid 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" で始まっている場合はユーザーの employeeid を値とする要求を出力し、それ以外の場合は拡張属性を出力するものとします。For example, if you want to emit a claim where the value is the user’s employeeid 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.
たとえば、特定のユーザーの employeeid が空の場合は、extensionattribute に格納されている属性を出力するものとします。For example, if you want to output an attribute stored in an extensionattribute if the employeeid 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.
たとえば、特定のユーザーの employeeid が空ではない場合は、extensionattribute に格納されている属性を出力するものとします。For example, if you want to output an attribute stored in an extensionattribute if the employeeid 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.

次の手順Next steps