組み込みの招待システムを使用する代わりに、サーバーレス機能を使用し、ユーザーがサインインするときにロールをプログラムでユーザーに割り当てることができます。
関数にカスタム ロールを割り当てるには、ユーザーが ID プロバイダーで正常に認証されるたびに自動的に呼び出される API 関数を定義します。 関数には、プロバイダーからユーザーの情報が渡されます。 関数は、ユーザーに割り当てられているカスタム ロールの一覧を返す必要があります。
この関数の使用例を次に示します。
- データベースに対してクエリを実行し、ユーザーに割り当てるロールを決定する
-
Microsoft Graph API を呼び出して、Active Directory グループ メンバーシップに基づいてユーザーのロール割を決定する
- ID プロバイダーによって返されたクレームに基づいてユーザーのロールを決定する
注意
関数を使用してロールを割り当てることができるのは、カスタム認証が構成されている場合のみです。
この機能を有効にすると、組み込みの招待システムを介して割り当てられたすべてのロールは無視されます。
ロールの割り当て機能として API 関数を使用するように Static Web Apps を構成するには、アプリケーションの構成ファイルのセクションにrolesSource
プロパティauth
を追加します。
rolesSource
プロパティの値は API 関数へのパスです。
{
"auth": {
"rolesSource": "/api/GetRoles",
"identityProviders": {
// ...
}
}
}
注意
構成が完了すると、外部の HTTP 要求からロール割り当て関数にアクセスできなくなります。
アプリの構成で rolesSource
プロパティを定義した後で、指定したパスの静的 Web アプリに API 関数を追加します。 マネージド関数アプリを使用することも、独自の関数アプリを取り入れることもできます。
ユーザーが ID プロバイダーで正常に認証されるたびに、POST メソッドによって、指定した関数が呼び出されます。 この関数によって、プロバイダーからのユーザー情報を含む JSON オブジェクトが要求本文に渡されます。 ID プロバイダーによっては、関数でユーザー ID を使用して API 呼び出しを行うために使用できる accessToken
もユーザー情報に含まれている場合があります。
Microsoft Entra ID のペイロードの例を次に示します:
{
"identityProvider": "aad",
"userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"userDetails": "ellen@contoso.com",
"claims": [
{
"typ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"val": "ellen@contoso.com"
},
{
"typ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
"val": "Contoso"
},
{
"typ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
"val": "Ellen"
},
{
"typ": "name",
"val": "Ellen Contoso"
},
{
"typ": "http://schemas.microsoft.com/identity/claims/objectidentifier",
"val": "7da753ff-1c8e-4b5e-affe-d89e5a57fe2f"
},
{
"typ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
"val": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
},
{
"typ": "http://schemas.microsoft.com/identity/claims/tenantid",
"val": "3856f5f5-4bae-464a-9044-b72dc2dcde26"
},
{
"typ": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
"val": "ellen@contoso.com"
},
{
"typ": "ver",
"val": "1.0"
}
],
"accessToken": "eyJ0eXAiOiJKV..."
}
関数は、ユーザーの情報を使用して、ユーザーに割り当てるロールを決定できます。 関数は、ユーザーに割り当てるカスタム ロール名のリストを含む JSON 本文を含む HTTP 200 応答を返す必要があります。
たとえば、ユーザーに Reader
と Contributor
のロールを割り当てるには、次の応答を返します。
{
"roles": [
"Reader",
"Contributor"
]
}
ユーザーに他のロールを割り当てたくない場合は、空の roles
配列を返します。
詳細については、「チュートリアル: 関数と Microsoft Graph を使用してカスタム ロールを割り当てる」を参照してください。