カスタム承認ワークフローをセルフサービス サインアップに追加する

API コネクタを使用すると、独自のカスタム承認ワークフローをセルフサービス サインアップと統合できます。これにより、テナントに作成されるゲスト ユーザー アカウントを管理できます。

この記事では、承認システムと統合する方法の例を示します。 この例では、セルフサービス サインアップ ユーザー フローがサインアップ プロセス中にユーザー データを収集し、データを承認システムに渡します。 承認システムでは、次のことが可能です。

  • ユーザーを自動的に承認し、Azure AD にユーザー アカウントの作成を許可します。
  • 手動レビューをトリガーします。 要求が承認された場合、承認システムは Microsoft Graph を使用してユーザー アカウントをプロビジョニングします。 承認システムは、アカウントが作成されたことをユーザーに通知することもできます。

重要

承認システム用のアプリケーションを登録する

承認システムをアプリケーションとして Azure AD テナントに登録することで、承認システムを Azure AD で認証し、承認システムがユーザーを作成するアクセス許可を持つようにすることができます。 詳しくは、Microsoft Graph 用の認証および承認の基本に関する記事をご覧ください。

  1. Azure Portal に Azure AD 管理者としてサインインします。

  2. [Azure サービス][Azure Active Directory] を選択します。

  3. 左のメニューで、 [アプリの登録] を選択し、 [新規登録] を選択します。

  4. アプリケーションの名前を入力します (Sign-up Approvals など)。

  5. [登録] を選択します。 他のすべてのフィールドは既定値のままにすることができます。

    Screenshot that highlights the Register button.

  6. 左のメニューの [管理] で、 [API のアクセス許可] を選択してから、 [アクセス許可の追加] を選択します。

  7. [API アクセス許可の要求] ページで、 [Microsoft Graph] を選択し、 [アプリケーションのアクセス許可] を選択します。

  8. [アクセス許可の選択] で、 [ユーザー] を展開して、 [User.ReadWrite.All] チェック ボックスをオンにします。 このアクセス許可は、承認システムが承認時にユーザーを作成することを許可します。 [アクセス許可の追加] を選択します。

    Register an application page

  9. [API のアクセス許可] ページで、 [(テナント名) に管理者の同意を与えます] を選択し、 [はい] を選択します。

  10. 左のメニューの [管理][証明書とシークレット] を選択してから、[新しいクライアント シークレット] を選択します。

  11. シークレットの [説明] を入力し (たとえば、Approvals client secret (承認クライアント シークレット) )、クライアント シークレットが期限切れになるまでの期間を選択します。 その後、 [追加] を選択します。

  12. クライアント シークレットの値をコピーします。

    Copy the client secret for use in the approval system

  13. クライアント ID としてのアプリケーション ID と、Azure AD で認証するために生成した クライアント シークレットを使用するように承認システムを構成します。

API コネクタを作成する

次に、セルフサービス サインアップ ユーザー フロー用の API コネクタを作成します。 承認システム API には、次に示す例のように、2 つのコネクタとそれに対応するエンドポイントが必要です。 これらの API コネクタは次の処理を実行します。

  • 承認状態の確認 - ユーザーが既存の承認要求を持っているか、既に拒否されているかどうかを確認するために、ユーザーが ID プロバイダーでサインインした直後に承認システムに呼び出しを送信します。 承認システムが自動承認の決定のみを行う場合、この API コネクタは必要ないことがあります。 "承認状態の確認" API コネクタの例。

    Check approval status API connector configuration

  • [要求の承認] - ユーザーが [属性のコレクション] ページに入力した後、ユーザー アカウントが作成される前に、承認を要求するために承認システムに呼び出しを送信します。 承認要求は、自動的に許可したり手動で確認したりすることができます。 "要求の承認" API コネクタの例。

    Request approval API connector configuration

これらのコネクタを作成するには、「API コネクタを作成する」の手順に従います。

ユーザー フローで API コネクタを有効にする

ここで、次の手順を使用して、セルフサービス サインアップ ユーザー フローに API コネクタを追加します。

  1. Azure Portal に Azure AD 管理者としてサインインします。

  2. [Azure サービス][Azure Active Directory] を選択します。

  3. 左側のメニューで、 [External Identities] を選択します。

  4. [ユーザー フロー] を選択し、API コネクタを有効にするユーザー フローを選択します。

  5. [API connectors](API コネクタ) を選択し、ユーザー フローの次の手順で呼び出す API エンドポイントを選択します。

    • サインアップ中の ID プロバイダーとのフェデレーションの後: 承認状態 API コネクタ ( [承認状態の確認] など) を選択します。
    • ユーザーを作成する前:承認要求 API コネクタを選択します。たとえば、 [要求の承認] を選択します。

    Add APIs to the user flow

  6. [保存] を選択します。

API 応答を使用してサインアップ フローを制御する

承認システムは、呼び出し時にその応答を使用して、サインアップ フローを制御できます。

"承認状態の確認" API コネクタの要求と応答

API によって "承認状態の確認" API コネクタから受信した要求の例:

POST <API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "identities": [ //Sent for Google, Facebook, and Email One Time Passcode identity providers 
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "givenName":"John",
 "lastName":"Smith",
 "ui_locales":"en-US"
}

API に送信される正確な要求は、ID プロバイダーによって提供される情報によって異なります。 "email" は常に送信されます。

"承認状態の確認" の継続応答

承認状態の確認 API エンドポイントは、次の場合に継続応答を返す必要があります。

  • ユーザーが以前承認を要求していない。

継続応答の例:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "Continue"
}

"承認状態の確認" のブロック応答

承認状態の確認 API エンドポイントは、次の場合にブロック応答を返す必要があります。

  • ユーザー承認が保留されている。
  • ユーザーが拒否され、再度承認を要求することができない。

ブロック応答の例は次のとおりです。

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your access request is already processing. You'll be notified when your request has been approved.",
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your sign up request has been denied. Please contact an administrator if you believe this is an error",
}

"要求の承認" API コネクタの要求と応答

API によって受信された "要求の承認" API コネクタからの HTTP 要求の例:

POST <API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "identities": [ // Sent for Google, Facebook, and Email One Time Passcode identity providers 
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "givenName":"John",
 "surname":"Smith",
 "jobTitle":"Supplier",
 "streetAddress":"1000 Microsoft Way",
 "city":"Seattle",
 "postalCode": "12345",
 "state":"Washington",
 "country":"United States",
 "extension_<extensions-app-id>_CustomAttribute1": "custom attribute value",
 "extension_<extensions-app-id>_CustomAttribute2": "custom attribute value",
 "ui_locales":"en-US"
}

API に送信される正確な要求は、ユーザーから収集される情報または ID プロバイダーによって提供される情報によって異なります。

"要求の承認" の継続応答

要求の承認 API エンドポイントは、次の場合に継続応答を返す必要があります。

  • ユーザーを自動的に承認できる。

継続応答の例:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "Continue"
}

重要

継続応答を受信すると、Azure AD によってユーザー アカウントが作成され、そのユーザーがアプリケーションに送られます。

"要求の承認" のブロック応答

要求の承認 API エンドポイントは、次の場合にブロック応答を返す必要があります。

  • ユーザー承認要求が作成されて現在保留になっている。
  • ユーザー承認要求が自動的に拒否された。

ブロック応答の例は次のとおりです。

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your account is now waiting for approval. You'll be notified when your request has been approved.",
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your sign up request has been denied. Please contact an administrator if you believe this is an error",
}

応答内の userMessage がユーザーに表示されます。次に例を示します。

Example pending approval page

手動承認後のユーザー アカウントの作成

手動による承認を取得した後、カスタム承認システムでは Microsoft Graph を使用してユーザー アカウントを作成します。 承認システムがユーザー アカウントをプロビジョニングする方法は、ユーザーによって使用された ID プロバイダーによって異なります。

Google または Facebook のフェデレーション ユーザーおよび電子メール ワンタイム パスコードの場合

重要

この方法を使用するには、承認システムは、identitiesidentities[0]、および identities[0].issuer が存在し、identities[0].issuer が 'facebook'、'google'、または 'mail' に一致することを明示的に確認する必要があります。

ユーザーが Google アカウント、Facebook アカウント、または電子メール ワンタイム パスコードを使用してサインインした場合は、ユーザー作成 API を使用できます。

  1. 承認システムはユーザー フローから HTTP 要求を受信します。
POST <Approvals-API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@outlook.com",
 "identities": [
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value",
 "ui_locales":"en-US"
}
  1. 承認システムは、Microsoft Graph を使用してユーザー アカウントを作成します。
POST https://graph.microsoft.com/v1.0/users
Content-type: application/json

{
 "userPrincipalName": "johnsmith_outlook.com#EXT@contoso.onmicrosoft.com",
 "accountEnabled": true,
 "mail": "johnsmith@outlook.com",
 "userType": "Guest",
 "identities": [
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value"
}
パラメーター 必須 説明
userPrincipalName はい API に送信された email 要求を取得し、@ 文字を _ に置き換え、これを #EXT@<tenant-name>.onmicrosoft.com の先頭に追加することによって生成できます。
accountEnabled はい true に設定する必要があります。
mail はい API に送信される email 要求と同じです。
userType はい Guestである必要があります。 このユーザーをゲスト ユーザーとして指定します。
ID はい フェデレーション ID 情報。
<otherBuiltInAttribute> いいえ displayNamecity などの他の組み込み属性。 パラメーター名は、API コネクタによって送信されるパラメーターと同じです。
<extension_{extensions-app-id}_CustomAttribute> いいえ ユーザーに関するカスタム属性。 パラメーター名は、API コネクタによって送信されるパラメーターと同じです。

Azure Active Directory のフェデレーション ユーザーまたは Microsoft アカウント ユーザーの場合

ユーザーがフェデレーション Azure Active Directory アカウントまたは Microsoft アカウントを使用してサインインする場合は、招待 API を使用してユーザーを作成し、必要に応じてユーザー更新 API を使用してユーザーに追加の属性を割り当てる必要があります。

  1. 承認システムはユーザー フローから HTTP 要求を受信します。
POST <Approvals-API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value",
 "ui_locales":"en-US"
}
  1. 承認システムは、API コネクタによって提供される email を使用して招待を作成します。
POST https://graph.microsoft.com/v1.0/invitations
Content-type: application/json

{
    "invitedUserEmailAddress": "johnsmith@fabrikam.onmicrosoft.com",
    "inviteRedirectUrl" : "https://myapp.com"
}

応答の例:

HTTP/1.1 201 OK
Content-type: application/json

{
    ...
    "invitedUser": {
        "id": "<generated-user-guid>"
    }
}
  1. 承認システムは、招待されたユーザーの ID を使用して、収集されたユーザー属性でユーザーのアカウントを更新します (省略可能)。
PATCH https://graph.microsoft.com/v1.0/users/<generated-user-guid>
Content-type: application/json

{
    "displayName": "John Smith",
    "city": "Redmond",
    "extension_<extensions-app-id>_AttributeName": "custom attribute value"
}

次のステップ