Azure AD による モバイルアプリのデバイス証明書認証の実現方法


#はじめに

本記事では、モバイルアプリ(iOS または Android ネイティブアプリ）の証明書認証連携時の注意点とその対応方法をご説明いたします。

現在、大変多くの モバイル SaaS アプリケーションが Apple AppStore や Google Play ストアから提供されており、その中にはビジネスアプリも多数存在しています。ビジネスアプリを企業で利用する場合、セキュリティを考慮する必要があり、組織で管理されたデバイスのみに利用を制限することが多くの企業で求められます。このデバイス制限のセキュリティポリシーの実現方法として Azure Active Directory (Azure AD)の条件付きアクセスポリシーがあります。Microsoft Intune(Microsoft Endpoint Manager)で管理された準拠デバイスのみ SaaS アプリのアクセスを許可することが可能です。しかしながらこの方法を **Microsoft(Office 365アプリ等) 以外のモバイルアプリで実施する場合、注意点があります**。
※ちなみに、Microsoft のモバイルアプリ以外でも [MSAL(Microsoft Authentication Library)](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/msal-overview) を利用しているモバイルアプリは本記事の対応なしで証明書アクセスが可能です。

#モバイルアプリをデバイスによるアクセス制限をする際の注意点
モバイルアプリ（以下の例では Salesforce iOS アプリ)を Azure AD の条件付きアクセスでポリシー準拠デバイスであることをアクセス許可の条件にします。 
※本記事では Azure AD による Salesforce へのSAML シングルサインオンは完了済を前提とします。Salesforce のシングルサインオン設定についてはこちらの Microsoft の[サイト](https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/salesforce-tutorial)をご参照ください。

以下はAzure AD の条件付きアクセスポリシーで準拠デバイスのみアクセスを許可させる設定画像の一例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/5247ecd5-5285-53f0-ccff-b3ad40ccb9b8.png)
Azure AD で条件付きアクセスポリシーを設定後、Intune からポリシープロファイルをデバイスに配信します。iOS Salesforce アプリを起動し、Azure AD でユーザー認証を実施します。
![無題の画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/42f6b1c1-7a6a-1532-8235-19f1ab08dbe7.png)
ユーザー認証成功後に、以下のメッセージが出力され、Safari か Microsoft Edge を使うように促されます。**iOS の Salesforce モバイルアプリを使用することができません**。
![unablemobileapps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/76411818-2abb-5212-d2b5-4b092204d840.png)
モバイルアプリはブラウザーアプリに比較すると機能面やパフォーマンス、ユーザーインターフェースなどが優れている場合が多く、モバイルアプリが利用できない場合、エンドユーザーのアプリ利用時の満足度を低下させ、利用率低下の要因になります。
しかしながら、この動作はiOSの仕様です。iOS のデザイン上、IntuneなどのMDMサービスから配信されたデバイス証明書にアクセスできるアプリケーションはSafariなどのアプリに制限されています。そのためAppStoreからインストールするiOSネイティブアプリはデバイス証明書にアクセスすることができません。Android OS も iOS と同様の仕様になっており、MDMが配信したデバイス証明書を直接モバイルアプリが利用することができません。この モバイルアプリの証明書アクセス不可問題は、アプリベンダーは以前から認識しており、ベンダー側で既にこの問題に対応しているアプリケーションがあります。その一つが Salesforce アプリです。

#Salesforce モバイルアプリのデバイス証明書利用方法

Salesforce はモバイルアプリベンダーと MDM/EMM ベンダーの共通規格である [AppConfig Community](https://www.appconfig.org/) をサポートしており、Microsoft Endpoint Manager admin center(Intune) の管理コンソールから設定可能です。「アプリ構成ポリシー」ブレードから*マネージドデバイス*、プラットフォームには *iOS/iPadOS*、対象アプリには *Salesforce* を選択します。次に構成デザイナーを使用し Salseforce アプリのAppConfig の構成キー *RequireCertAuth* と値 *true* を設定し、ポリシーを適用するグループに割り当て作成します。ポリシーがデバイスに配信されると 証明書による認証が可能になります。以下の表に記載されているように iOS、Android の両方で設定できます。

表：Salesforce モバイルアプリの AppConfig 構成情報(抜粋)

| 構成キー | データ型 | プラットフォーム|説明|
|:-:|:--:|:---:|:---|
|RequireCertAuth|ブール値|iOS, Android|true の場合、証明書ベースの認証フローが開始されます。Android: WebView 内の認証デバイスででユーザ証明書を使用します。iOS: すべての認証要求のために、ユーザを Safari へリダイレクトします。|

※上表のSalesforceアプリの AppConfig 構成情報の詳細についてはこちらのセールスフォースの[サイト](https://help.salesforce.com/s/articleView?id=000340176&type=1)をご参照ください。 

Microsoft Endpoint Manager admin center(Intune管理コンソール)による AppConfig 構成キー(RequireCertAuth) 設定画面は以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/c3c460e8-94c4-a59b-99f4-0ebbd074bc78.png)

※ ちなみに、AppServiceHosts キーは Salesforce アプリのホスト情報をアプリに提供します。デバイス証明書認証の必須設定ではありません。ただし、この設定によりエンドユーザーの入力の手間を一つ省くことが可能になります。詳細はセールスフォースの[サイト](https://help.salesforce.com/s/articleView?id=000340176&type=1)でご確認ください。

#アプリ構成ポリシーを設定後の動作確認
アプリ構成ポリシー構成後に SalesforceのiOS モバイルアプリを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/0af50ee8-31a1-ed45-74a1-dee37aab1cad.png)

iOS の場合、ユーザー認証が成功すると、クライアント(デバイス)証明書へのアクセス確認の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/f9df0b0c-f5e6-b93f-d19a-6ac8817e24e7.png)
Android デバイスの場合も、以下の証明書確認の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/47852790-7550-6052-19d9-e521c17329da.png)
クライアント証明書認証と準拠デバイスからのアクセスであることを確認すると Salesforce アプリが利用できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265935/95393b85-3e05-5b2f-6027-058e5b01e395.png)
#おわりに
本記事ではモバイルアプリのデバイス証明書アクセス不可問題とその対応方法を記載いたしました。
Salesforce モバイルアプリでは AppConfig を使用しデバイス証明書問題に対応しています。これにより Azure AD の条件付きアクセスを用いて安全なデバイスでモバイルアプリを利用することが可能になります。その結果、セキュリティの向上、エンドユーザーの満足度向上、利用率の向上にも繋がり、ひいては生産性向上にもなり企業にとってもメリットは大きいです。モバイルアプリで同様の問題に遭遇した際はベンダーに確認してみると解決する可能性があります。

次回の記事では「[SaaS への SSO を簡単に実現! Azure AD アプリケーションギャラリー](https://qiita.com/hiyoshino/items/04f1e4e9d4172b47d4e9)」を掲載する予定です。

> 2021年12月15日追記
> iOS モバイルアプリのデバイス証明書認証については以下の記事もご参照頂ければ幸いです。
> [DocuSign モバイルアプリで Microsoft Enterprise SSO プラグインを試してみた（いわゆるモバイルアプリの社給デバイス縛り）](https://qiita.com/hiyoshino/items/c3e8e1049afbc04bff74)


投稿内容は私個人の意見であり、所属企業・部門とは関係ありません。また、いかなる保証を与えるものでもありません。