アプリ保護条件付きアクセスは、Intune がアプリ保護ポリシーが適用されていることを確認するまで、サーバー トークンへのアクセスをブロックします。 この機能を使用するには、ユーザーの追加フローを変更する必要があります。 顧客が App Protection CA を有効にすると、保護されたリソースにアクセスするその顧客のテナントのアプリケーションは、この機能をサポートしていない限り、アクセス トークンを取得できなくなります。
注:
このガイドは、いくつかの異なる段階に分かれています。 まず、「 ステージ 1: 統合を計画する」を確認することから始めます。
ステージ 6: アプリ保護 CA のサポート
ステージ目標
- iOS アプリ内でアプリ保護条件付きアクセスをサポートするために使用できるさまざまな API について説明します
- アプリ保護の統合 アプリとユーザーへの条件付きアクセス。
- 上記のアプリおよびユーザーとの統合をテストします。
依存関係
Intune SDK に加えて、アプリで App Protection CA を有効にするには、次の 2 つのコンポーネントが必要です。
- iOS 認証アプリ
- MSAL 認証ライブラリ 1.0 以降
MAM-CA 修復フロー
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 のテスト ユーザーの構成
- 管理者の資格情報を使用して https://portal.azure.com にサインインします。
- [Microsoft Entra ID>条件付きアクセス]>新しいポリシーの作成] を選択します。 条件付きアクセス ポリシーを作成するには
- 次の項目を設定して、条件付きアクセス ポリシーを構成します。
- [名前] フィールドへの入力。
- ポリシーを有効にする。
- ユーザーまたはグループにポリシーを割り当てる。
- クラウド アプリを割り当てます。 [ 含める>すべてのクラウド アプリ] を選択します。 警告に示されているように、この設定を誤って構成しないように注意してください。 たとえば、すべてのクラウド アプリを除外した場合は、コンソールから自分自身をロックアウトします。
- [アクセス制御]>[アクセスの付与]>アプリの保護ポリシーの要求の順に選び、アクセス制御を許可します。
- ポリシーの構成が完了したら、[ 作成] を選択してポリシーを保存し、適用します。
- ポリシーを有効にします。
- また、ユーザーが 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 ビュー機能 は、アプリの必要なアプリ保護ポリシーのサポートに応じて、必要な場合と不要な場合があります。