Verify with Wallet APIの概要

年齢/本人確認が必要なアプリでVerify with Wallet APIを利用すると、Appleウォレットに追加された身分証明書を使ってユーザー情報をすばやく安全に検証できます。

Verify with Wallet APIで本人確認を送信するiPhone

    概要

    確認プロセスの合理化

    「ウォレットで確認」では、Appleウォレットにある身分証明書の情報を共有することで、アプリ内でより簡単かつ迅速に確認を行えるようになります。ユーザーが本人確認や年齢確認する必要があるサービスの確認プロセスを合理化できるように設計されており、書類のスキャンや顔写真の撮影などの面倒な作業が不要になります。ワンタップのシンプルな操作性を実現することで、煩わしさが解消され、離脱の回避につながります。

    検証/認証済みの身分証明書の情報

    「ウォレットで確認」を介して取得される身分証明書の情報は、政府の発行機関によって検証されています。Appleウォレットに身分証明書を追加するには、ユーザーは政府発行の有効な身分証明書で本人確認が必要です。この証明プロセスにおいて、発行機関はユーザーの身分証明書が本物であり、そのユーザーに帰属するものであることを確認します。さらに、身分証明書の情報をアプリに提示するには、身分証明書をAppleウォレットに追加する際に使用したのと同じFace IDかTouch IDで認証する必要があります。

    プライバシーの保護

    Verify with Walletと統合すると、アプリからリクエストする身分証明書の情報とその保存期間について、十分な透明性を確保できます。アプリでは、トランザクションの完了に必要な特定のデータのみをリクエストできます。そのため、ユーザーが身分証明書の情報を必要以上に共有する必要がなくなります。さらに、発行機関もAppleも、ユーザーがいつ、どこで免許証やID情報を共有したかを把握することはできません。

    利用可能な地域と要件

    「ウォレットで確認」は下記の地域でサポートされており、利用するには、対応デバイスのAppleウォレットにモバイル運転免許証または身分証明書を追加している必要があります。

    • アリゾナ州、コロラド州、ジョージア州、ハワイ州、イリノイ州、アイオワ州、メリーランド州、モンタナ州、ニューメキシコ州、ノースダコタ州、オハイオ州、ウエストバージニア州での運転免許証または身分証明書による確認には、iOS 16.5以降を搭載したiPhone 8以降、またはwatchOS 9.5以降を搭載したApple Watch Series 4以降が必要です。
    • アーカンソー州での運転免許証または身分証明書による確認には、iOS 16.5以降を搭載したiPhone 8以降、またはwatchOS 11以降を搭載したApple Watch Series 6以降が必要です。
    • バージニア州での運転免許証または身分証明書による確認には、iOS 16.5以降を搭載したiPhone 8以降、またはwatchOS 10以降を搭載したApple Watch Series 6以降が必要です。
    • カリフォルニア州での運転免許証または身分証明書による確認には、iOS 17.5以降を搭載したiPhone XS以降、またはwatchOS 10以降を搭載したApple Watch Series 4以降が必要です。
    • プエルトリコでの運転免許証または身分証明書による確認には、iOS 18.1以降を搭載したiPhone XS以降、またはwatchOS 11以降を搭載したApple Watch Series 6以降が必要です。
    • 日本でのマイナンバーカードによる確認には、iOS 18.5以降を搭載したiPhone XS以降が必要です。
    • 米国のパスポートを使用したデジタルIDによる確認には、iOS 26.1以降を搭載したiPhone 11以降、またはwatchOS 26.1以降を搭載したApple Watch Series 6以降が必要です。

    エンタイトルメントの申請

    Verify with Wallet APIを使用する場合は、アプリにエンタイトルメントが割り当てられている必要があります。Apple Developer ProgramのAccount Holderは、Verify with Wallet APIのエンタイトルメントを申請できます。申請はバンドルID(アプリの固有識別子)単位で許可され、割り当てられたエンタイトルメントは、そのバンドルIDに関連付けられている1つのバイナリでのみ使用できます。

    提供する必要がある情報

    アプリ情報

    • アプリ名
    • バンドルID(アプリ固有の識別子)
    • App StoreまたはTestFlightのURL
    • App ClipアプリID(利用可能な場合)
    • アプリを通じて提供する商品やサービスのうち年齢/本人確認が必要になる内容の説明
    • Appleウォレットの身分証明書を使用していないユーザーの年齢/本人確認プロセスのスクリーンショット

    リクエスト可能なデータ

    年齢確認データ:

    • 対象年齢以上であることを示すフラグ
    • 年齢(歳)
    • 発行機関
    • 証明写真

    本人確認データ:

    • 住所
    • 生年月日
    • 目の色
    • 髪の色
    • 身長
    • 体重
    • 臓器提供に関する意思
    • 軍歴
    • 性別
    • 証明書番号
    • 証明書発行日
    • 証明書有効期限
    • 運転特権
    • DHSに対するコンプライアンス(REAL ID)
    • 証明写真の撮影日
    • 署名
    • 国籍
    • 出生地
    • 短期在留資格

    使用に関する情報

    アプリがエンタイトルメントを受けるには、該当する地域において、同じ商品やサービスを利用する各ユーザーに、年齢/本人確認に関する同等のプロセスを義務付ける必要があります。

    • アプリを通じて提供する商品やサービスのうち、年齢/本人確認が必要となる内容と、現在の確認方法を説明します。
    • Appleウォレットの身分証明書を使用するユーザーに対して提案される年齢/本人確認プロセスのスクリーンショットと、Appleウォレットの身分証明書を使用していないユーザーに対する既存のまたは提案される年齢/本人確認プロセスのスクリーンショットをアップロードします。
    • アプリのプライバシーポリシーと、「ウォレットで確認」用に各種データを収集または保持する各サードパーティのプライバシーポリシーへのURLリンクを提供します。

    APIの実装

    Verify with Wallet APIのエンタイトルメントを受け取ったら、PassKitフレームワークでVerify with Wallet APIを呼び出し、リクエストする情報を指定できます。アプリ間で一貫した体験を提供できるように、APIには専用のボタンが一式用意されています。年齢/本人確認を求める必要があるアプリでご利用ください。ボタンをタップすると、情報共有のリクエストについて説明するシートが表示され、ユーザーは同意するかキャンセルするかを選択できます。ユーザーが同意すると、アプリには暗号化された応答が届き、サーバに渡されて復号と検証が行われます。

    Verify with Apple Wallet
    Continue with Apple Wallet
    Appleウォレットで年齢を確認
    Verify Identity with Apple Wallet

    ローカライズされたボタン

    Appleウォレットで確認
    Continue with Apple Wallet
    Appleウォレットで年齢を確認
    Appleウォレットで本人確認

    ドキュメント、ビデオ、リソース

    発行機関証明書

    ユーザーの発行機関のペイロードを確認するには、その発行機関のWebサイトからIACA証明書をダウンロードして使用する必要があります。

    米国の運転免許証と州発行の身分証明書
    マイナンバーカード(日本)
    米国のパスポートのデジタルID

    「ウォレットで確認」の使用に関するガイドライン

    「ウォレットで確認」の使用には、特定のガイドラインが適用されます。以下に該当する場合、いかなるアプリにも「ウォレットで確認」を組み込むことはできません。

    • 法律に違反する、または法的要件を満たしていない
    • データの使用および処理方法について、ユーザーに正確かつ誠実に開示していない
    • 薬物関連用品または性的関連物品やサービスを主に提供または販売している
    • 理由の如何を問わず、暴力を助長するもの
    • 詐欺行為に関わっている
    • 他人の知的財産権、パブリシティ権、またはプライバシー権を侵害している
    • 誤った、あるいは軽蔑的な形でAppleまたはApple製品を提示している
    • 以下に関係するサービスや取引を提供している
      • たばこ、マリファナ、電子タバコ
      • 銃器、武器、弾薬
      • 違法薬物、または合法的に処方されていない規制薬物
      • 消費者にとって安全上のリスクがある製品
      • 違法行為での使用が意図される製品
      • 偽造品または盗品
      • ポルノグラフィ

    重要:Appleは、いかなる理由においてもそれが妥当であるとみなす場合、アプリに対していつでも「ウォレットで確認」を無効にする権利を有します。

    よくある質問

    APIの使用

    エンタイトルメントが付与されたのち、デベロッパアカウントとXcodeプロジェクトを設定するにはどうすればよいですか?

    Apple Developer Webサイトの「Certificates, Identifiers, & Profiles(証明書、ID、プロファイル)」セクションで、以下の操作を行います。

    1. マーチャントIDを作成します。マーチャントIDをすでにお持ちで、Apple Payで使用している場合は、ここで再利用できます。
    2. マーチャントIDの「Identity Access Certificate(IDアクセス証明書)」を作成します。これは、「Edit or Configure a Merchant ID(マーチャントIDの編集または設定)」ページの「Identity(ID)」タブに表示されます。
      1. 暗号化証明書の秘密鍵は、APIから返されたencryptedDataを復号するためにサーバで使用されます。
    3. アプリIDに「In App Identity Presentment(アプリでのID提示)」機能を追加します。これは、「Edit your App ID Configuration(アプリIDの設定を編集)」ページの「Additional Capabilities(追加機能)」タブに表示されます。
    4. アプリIDに「In App Identity Presentment Merchant IDs(アプリでのID提示のマーチャントID)」機能を追加し、関連付けられているマーチャントIDを選択します。
    5. これらの変更を含むプロビジョニングプロファイルを新規作成します。

    また、アプリのエンタイトルメントplistファイルを手動で構成する必要があります。

    エンタイトルメント1:

    エンタイトルメントを申請して、エンタイトルメントの取得が必要な本人確認書類のタイプを選択します。

    "com.apple.developer.in-app-identity-presentment": {
    		"document-types": [
    			"us-drivers-license"
    		],
    		"elements": [
    			"given-name",
    			"family-name",
    			"portrait",
    			"address",
    			"issuing-authority",
    			"document-expiration-date",
    			"document-number",
    			"driving-privileges",
    			"age",
    			"date-of-birth"
    		]
    	},

    エンタイトルメントのリストをフィルタリングして、エンタイトルメントを申請したものだけにします。

    エンタイトルメント2:
    "com.apple.developer.in-app-identity-presentment.merchant-identifiers": [
    		“your-merchant-id-goes-here”
    	]

    Apple Payで同じマーチャントIDを使用している場合でも、このエンタイトルメントを追加する必要があります。Apple Payのcom.apple.developer.in-app-paymentsエンタイトルメントは、本人確認では認識されません。

    ブラウザベースのオンライン提示では、W3Cが定めるmDoc request APIをサポートする予定です。最終的な定義は未定ですが、適切なプライバシーとセキュリティのガイドラインを満たすサードパーティアプリからの適合するID認証情報を提示することが可能になります。

    APIの使用をテストするにはどうすればよいですか?

    APIの使用をテストするには、いくつかの方法があります。

    • iOSシミュレータを使用する:シミュレータにはモックデータがプリロードされており、APIとの統合をテストできます。シミュレータのモックデータからの応答を検証するために必要なキーやその他のリソースについて、詳しくはサンプルデータとシミュレータキーバンドルをダウンロードしてください。
    • iOSデバイスの場合:ウォレットおよびApple mDL Developer Integratorプロファイルをインストールすると、APIは実際のデバイス署名を含むモックデータを返しますが、発行者の署名は返しません。
    • テストサンプル:サンプルデータとシミュレータキーバンドルには、検証に必要なキーと証明書を網羅した応答のサンプルが含まれています。このサンプルを使用して、応答検証ロジックをテストできます。

    身分証明書の情報のリクエストに使用する記述子を教えてください。

    身分証明書の情報のリクエストには、PKIdentityNationalIDCardDescriptorを使用します。

    注:日本固有のエレメントは、API region(APIの地域)をJPに設定した場合にのみ取得できます。

    エレメント

    ISO/IEC 18013-5とAAMVAの名前空間にはどのような違いがありますか?

    ISO/IEC 18013-5の仕様がサポートする名前空間では、本人確認書類内にさまざまなエレメントを共存させることができます。ISO/IEC 18013-5は、org.iso.18013.5.1名前空間内で標準的なエレメントを定めています。米国自動車管理者協会(AAMVA)は、米国の運転免許証に固有の追加情報を含む独自の名前空間を定めています。

    Verify with Walletでサポートされている名前空間とエレメントについて、詳しくはPKIdentityDriversLicenseDescriptorのドキュメントをご参照ください。

    ISO/IEC 18013-5、ISO/IEC 23220、日本政府の名前空間にはどのような違いがありますか?

    ISO/IEC 18013-5は、運転免許証に関連するorg.iso.18013.5.1名前空間内で標準的なエレメントを定めています。ISO/IEC 23220-2は、写真付き身分証明書を記述するためのorg.iso.23220.1内の汎用名前空間を定めています。日本政府は、日本のマイナンバーカードに固有の追加のデータエレメントを含む独自の名前空間として、org.iso.23220.1.jpを定めています。

    Verify with Walletでサポートされている名前空間とエレメントについて、詳しくはPKIdentityNationalIDCardDescriptorのドキュメントをご参照ください。

    住所フィールドはどのような構成ですか?市区町村、都道府県/州(該当する場合)、郵便番号も取得可能ですか?

    はい。リクエストの「住所」エレメントで、番地、市区町村、都道府県/州(該当する場合)、国、郵便番号を取得できます。

    日本のマイナンバーカードの住所フィールドには、総務省が全国の都道府県と市区町村に定めた5桁のコードである「都道府県コード及び市区町村コード」も記載されています。詳しくは、https://www.soumu.go.jp/denshijiti/code.htmlをご参照ください。

    証明書番号とは何を指しますか?

    証明書番号とは、運転免許証番号、パスポート番号、またはマイナンバーカードに記載されたマイナンバー(日本のすべての市民および居住者に付与される12桁の個人識別番号。マイナンバーの使用は適用される法令に準拠します)などの、身分証明書番号を指します。

    年齢と年齢しきい値にはどのような違いがありますか?

    年齢は、ユーザーの年齢(歳)です。年齢しきい値は、ユーザーが特定の年齢を超えているかどうかを示すブール値です。たとえば、ユーザーが42歳の場合は以下のようになります。

    • 年齢は42を返します
    • AgeThresholdElementWithAge:18はtrueを返します
    • AgeThresholdElementWithAge:65はfalseを返します

    ユーザーが特定の年齢以上/未満かを確認するだけでよい場合は、最もプライバシーに配慮したアプローチである年齢しきい値のエレメントを使用する必要があります。

    発行機関とは何を指しますか?免許証や身分証明書を発行する政府などの機関のことですか?

    発行機関とは、ISO 18013-5の仕様に記載されている「発行機関」、「発行地域」、「発行国」、「国連識別記号」エレメントを指します。

    名前のエレメントはどのような構造ですか?

    APIでは、姓と名の2つの名前のエレメントが定められています。これらは、ISO 18013-5の仕様で定められている「given_name」と「family_name」のエレメントに対応します。名をリクエストすると(リクエスト可能な場合)、AAMVAの名前空間から「given_name_truncation」、「aka_given_name」、「name_suffix」、「aka_suffix」のエレメントが返されます。同様に、姓をリクエストすると(リクエスト可能な場合)、AAMVAの名前空間から「family_name_truncation」と「aka_family_name」のエレメントが返されます。

    ISO 18013-5の仕様には、ミドルネームのエレメントは含まれていません。通常、ミドルネームは名(given name)フィールドに含まれますが、最終的には各発行者の裁量に委ねられます。

    Appleウォレットでは、仮運転免許証など、標準外の運転免許証(DL)も利用できますか?その場合、運転免許証の種類を区別するにはどのような方法がよいですか?

    これらの免許証の種類が発行者から提供されたものである場合は、それらは運転特権の構造に含まれます。運転特権の構造は、ISO/IEC 18103-5のセクション7.2.4で定められています(https://www.iso.org/standard/69084.htmlを参照)。

    米国の運転免許証について、AAMVAには「国内運転特権」と呼ばれる独自のバリエーションがあり、使用可能な場合は返されます(12ページ:https://www.aamva.org/assets/best-practices,-guides,-standards,-manuals,-whitepapers/mobile-driver-s-license-implementation-guidelines-1-2を参照)。

    応答のフォーマット

    セッショントランスクリプトはどこで使用されますか?

    応答の暗号化を解除する際に、セッショントランスクリプトオブジェクトを作成します。セッショントランスクリプトは、HPKE復号化中に「info」パラメータとして使用され、ISO 18013-5で定義されるデバイス署名の検証の際に再度使用されます。詳しくは、「ウォレットIDリクエストの確認」をご参照ください。

    IACA証明書とは何ですか?どのIACA証明書をサポートする必要がありますか?

    IACA(発行機関認証局)証明書は信頼の基点であり、ID認証情報が州の車両管理局、日本政府、Appleなどの正当な発行者によって作成されたことを確認するために使用されます。

    Verify with Wallet APIで使用されるIACA証明書は、上記のリストの通りです。ウォレットのIDから返された情報を認証するには、サーバがこれらのIACA証明書を信頼する必要があります。

    サーバで応答を検証する必要があるのはなぜですか?

    身分証明書が正当な発行者によって作成され、正しいデバイスで提示されたことを確認するには、サーバで応答を検証する必要があります。検証をスキップしたり、アプリ内で検証を実行したりすると、悪意のあるユーザーによる本人確認書類の改ざんに対して脆弱になります。

    ID認証情報の発行者を確認するにはどうすればよいですか?

    ID認証情報の発行者(州の車両管理局、日本政府、またはAppleなど)は、発行機関のエレメントをリクエストすることで確認できます。または、ID認証情報の署名証明書に対応するIACA証明書から発行者を確認することもできます。