iOS 用 Intune アプリ SDK - アプリ保護 CA サポート (省略可能)

アプリ保護条件付きアクセスは、Intune がアプリ保護ポリシーが適用されていることを確認するまで、サーバー トークンへのアクセスをブロックします。 この機能を使用するには、ユーザーの追加フローを変更する必要があります。 顧客が App Protection CA を有効にすると、保護されたリソースにアクセスするその顧客のテナントのアプリケーションは、この機能をサポートしていない限り、アクセス トークンを取得できなくなります。

注:

このガイドは、いくつかの異なる段階に分かれています。 まず、「 ステージ 1: 統合を計画する」を確認することから始めます。

ステージ 6: アプリ保護 CA のサポート

ステージ目標

  • iOS アプリ内でアプリ保護条件付きアクセスをサポートするために使用できるさまざまな API について説明します
  • アプリ保護の統合 アプリとユーザーへの条件付きアクセス。
  • 上記のアプリおよびユーザーとの統合をテストします。

依存関係

Intune SDK に加えて、アプリで App Protection CA を有効にするには、次の 2 つのコンポーネントが必要です。

  1. iOS 認証アプリ
  2. MSAL 認証ライブラリ 1.0 以降

MAM-CA 修復フロー

MAM-CA 修復フローの図。

MAM コンプライアンス プロセス フロー

MAM コンプライアンス プロセス フローの図。

新しい API

新しい API のほとんどは、IntuneMAMComplianceManager.h にあります。 アプリでは、以下で説明する動作の 3 つの違いに注意する必要があります。

新しい動作 説明
アプリ → ADAL/MSAL: トークンの取得 アプリケーションは、トークンを取得しようとするときに、ERROR_SERVER_PROTECTION_POLICY_REQUIREDを受け取る準備をしておく必要があります。 アプリは、最初のアカウント追加フロー中、またはアプリケーション ライフサイクルの後半でトークンにアクセスするときに、このエラーを受け取る可能性があります。 アプリがこのエラーを受け取ると、アクセス トークンは付与されず、サーバー データを取得するために修復する必要があります。
App → Intune SDK: remediateComplianceForIdentity を呼び出す アプリが ADAL からERROR_SERVER_PROTECTION_POLICY_REQUIREDを受信した場合、または MSAL から MSALErrorServerProtectionPoliciesRequired を受信した場合は、[[IntuneMAMComplianceManager instance] remediateComplianceForIdentity] を呼び出して、Intune がアプリを登録し、ポリシーを適用できるようにする必要があります。 この呼び出し中にアプリが再起動される場合があります。 アプリを再起動する前に状態を保存する必要がある場合は、IntuneMAMPolicyDelegate の restartApplication デリゲート メソッドで保存できます。

remediateComplianceForIdentity は、registerAndEnrollAccount と loginAndEnrollAccount のすべての機能を提供します。 そのため、アプリはこれらの古い API のいずれも使用する必要はありません。
Intune → アプリ: 委任修復通知 Intune はポリシーを取得して適用した後、IntuneMAMComplianceDelegate プロトコルを使用して結果をアプリに通知します。 アプリが各エラーを処理する方法の詳細については、IntuneComplianceManager.h の IntuneMAMComplianceStatus を参照してください。 IntuneMAMComplianceCompliant を除くすべての場合において、ユーザーには有効なアクセス トークンがありません。

アプリに既に管理コンテンツがあり、準拠状態を入力できない場合、アプリケーションはセレクティブ ワイプを呼び出して企業コンテンツを削除する必要があります。

準拠状態に到達できない場合は、withErrorMessage と andErrorTitle によって提供されたエラー メッセージとタイトル文字列をローカライズしてアプリで表示する必要があります。

IntuneMAMComplianceDelegate の hasComplianceStatus メソッドの例

(void) accountId:(NSString*_Nonnull) accountId hasComplianceStatus:(IntuneMAMComplianceStatus) status withErrorMessage:(NSString*_Nonnull) errMsg andErrorTitle:(NSString*_Nonnull) errTitle
{
    switch(status)
    {
        case IntuneMAMComplianceCompliant:
        {
            /*
            Handle successful compliance
            */
            break;
        }
        case IntuneMAMComplianceNotCompliant:
        case IntuneMAMComplianceNetworkFailure:
        case IntuneMAMComplianceUserCancelled:
        case IntuneMAMComplianceServiceFailure:
        {
            UIAlertController* alert = [UIAlertController alertControllerWithTitle:errTitle
            message:errMsg
            preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
            handler:^(UIAlertAction * action) {exit(0);}];
            [alert addAction:defaultAction];
            dispatch_async(dispatch_get_main_queue(), ^{
            [self presentViewController:alert animated:YES completion:nil];
            });
            break;
        }
        case IntuneMAMComplianceInteractionRequired:
        {
            [[IntuneMAMComplianceManager instance] remediateComplianceForAccountId:accountId silent:NO];
            break;
        }
    }
}
func accountId(_ accountId: String, hasComplianceStatus status: IntuneMAMComplianceStatus, withErrorMessage errMsg: String, andErrorTitle errTitle: String) {
        switch status {
        case .compliant:
           //Handle successful compliance
        case .notCompliant, .networkFailure,.serviceFailure,.userCancelled:
            DispatchQueue.main.async {
              let alert = UIAlertController(title: errTitle, message: errMsg, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
                    exit(0)
                }))
                self.present(alert, animated: true, completion: nil)
            }
        case .interactionRequired:
            IntuneMAMComplianceManager.instance().remediateCompliance(forAccountId: accountId, silent: false)
   }

MSAL/ADAL

アプリは、クライアント機能変数を MSAL/ADAL 構成に追加して、アプリ保護 CA のサポートを示す必要があります。 必須の値は以下のとおりです。 claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}

MSALPublicClientApplicationConfig クラス リファレンス (azuread.github.io)

    MSALAADAuthority *authority = [[MSALAADAuthority alloc] initWithURL:[[NSURL alloc] initWithString:IntuneMAMSettings.aadAuthorityUriOverride] error:&msalError];
    MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc]
                                                 initWithClientId:IntuneMAMSettings.aadClientIdOverride
                                                 redirectUri:IntuneMAMSettings.aadRedirectUriOverride
                                                 authority:authority];

    /*
     IF YOU'RE IMPLEMENTING CA IN YOUR APP, PLEASE PAY ATTENTION TO THE FOLLOWING...
    */
    // This is needed for CA!
    // This line adds an option to the MSAL token request so that MSAL knows that CA may be active
    // Without this, MSAL won't know that CA could be activated
    // In the event that CA is activated and this line isn't in place, the auth flow will fail

    config.clientApplicationCapabilities = @[@"protapp"];
guard let authorityURL = URL(string: kAuthority) else {
            print("Unable to create authority URL")
            return
        }
         let authority = try MSALAADAuthority(url: authorityURL)
         let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID,redirectUri: kRedirectUri,
                                                                  authority: authority)
        msalConfiguration.clientApplicationCapabilities = ["ProtApp"]
        self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)

MAM SDK コンプライアンス修復 API の accountId パラメーターの Microsoft Entra オブジェクト ID をフェッチするには、次の手順を実行する必要があります。

  • まず、ERROR_SERVER_PROTECTION_POLICY_REQUIRED をアプリに報告するときに MSAL によって送信される MSALError オブジェクト内の userInfo[MSALHomeAccountIdKey] から homeAccountId を取得します。
  • この homeAccountId の形式は ObjectId.TenantId です。 '.' の文字列を分割して ObjectId 値を抽出し、修復 API remediateComplianceForAccountId の accountId パラメーターにその値を使用します。

終了条件

App Protection CA のテスト ユーザーの構成

  1. 管理者の資格情報を使用して https://portal.azure.com にサインインします。
  2. [Microsoft Entra ID>条件付きアクセス]>新しいポリシーの作成] を選択します。 条件付きアクセス ポリシーを作成するには
  3. 次の項目を設定して、条件付きアクセス ポリシーを構成します。
    • [名前] フィールドへの入力。
    • ポリシーを有効にする。
    • ユーザーまたはグループにポリシーを割り当てる。
  4. クラウド アプリを割り当てます。 [ 含める>すべてのクラウド アプリ] を選択します。 警告に示されているように、この設定を誤って構成しないように注意してください。 たとえば、すべてのクラウド アプリを除外した場合は、コンソールから自分自身をロックアウトします。
  5. [アクセス制御]>[アクセスの付与]>アプリの保護ポリシーの要求の順に選び、アクセス制御を許可します。
  6. ポリシーの構成が完了したら、[ 作成] を選択してポリシーを保存し、適用します。
  7. ポリシーを有効にします。
  8. また、ユーザーが MAM ポリシーの対象であることを確認する必要もあります。

テスト ケース

テスト ケース テスト方法 予想される結果
MAM-CA は常に適用されます アプリに登録する前に、ユーザーがアプリ保護 CA と MAM の両方のポリシーの対象になっていることを確認してください。 アプリが上記の修復ケースを処理すること、およびアプリがアクセス トークンを取得できることを確認します。
ユーザーが登録した後に適用される MAM-CA ユーザーは既にアプリにログインしている必要がありますが、App Protection CA の対象ではありません。 コンソールでユーザーを App Protection CA の対象にし、MAM 修復を正しく処理していることを確認します
MAM-CA コンプライアンス違反 App Protection CA ポリシーを設定しますが、MAM ポリシーは割り当てないでください。 ユーザーはアクセス トークンを取得できないようにする必要があります。 これは、アプリが IntuneMAMComplianceStatus エラー ケースを処理する方法をテストするのに役立ちます。

次の手順

上記のすべての 終了基準 を完了したら、アプリは App Protection CA サポートと正常に統合されます。 後の セクション「ステージ 7: Web ビュー機能 は、アプリの必要なアプリ保護ポリシーのサポートに応じて、必要な場合と不要な場合があります。