概要
NFC認証レポートは、Diditが書類のNFCチップ(ePassport、電子IDカード、またはその他のICAO 9303準拠の電子書類)から読み取り、検証した内容を記録したものです。チップに格納された身元情報、暗号学的な完全性チェック(SODおよびData Groupのハッシュ)、発行国が使用するDocument Signer Certificate(DSC)の概要が含まれます。 このレポートは、ユーザーがワークフロー内のNFCステップを完了した後に生成されます。Diditはユーザーのデバイス上でチップのData Groupを読み取り、Document Security Object(SOD)の署名を発行国のCSCA証明書で検証し、各Data GroupのハッシュをSODが署名した値と照合したうえで、チップのMRZを書類の表面からOCRで読み取ったMRZと突き合わせます。 マイナンバーカードは代わりにJPKIを通じて読み取られます(chip_protocol: "jpki")。そのレポートでは、証明書、署名、失効、保有者データのチェックがjpkiの下に格納され、ICAOのフィールドはnullのままです。マイナンバーカード(JPKI)を参照してください。
各レポートは、セッション全体のステータスとは独立した独自のstatusを持ち、NFCステップ単体がどのように判定されたかを示します。
- Approved: チップが読み取られ、発生した警告のうち、ステップをレビューまたは却下に振り分けるよう設定されたものが1つもない状態です。
- In Review: 設定されたアクションがReviewである警告が少なくとも1つ発生した状態です(例: 未検証チップのアクションがレビューに設定されている場合の
NFC_CHIP_NOT_VERIFIEDやNFC_TRUST_ANCHOR_MISSING、またはデフォルトのアクションのままのJPKI_REVOCATION_UNCHECKED)。 - 却下: 設定されたアクションが却下である警告が少なくとも1つ発生した状態です(例: データ不一致のアクションが却下に設定されている場合の
NFC_AND_OCR_DATA_NOT_SAME)。 - Not Finished: ユーザーがNFCステップを完了しなかった状態です。チップの読み取りが放棄されたか、デバイスがNFCに対応していませんでした。
- Resub Requested: レビュアーがユーザーに再提出を求めた状態です。このレポートは新しい試行によって置き換えられます。
APIレスポンス内での表示箇所
NFCレポートはnfc_verifications[]配列の中で返されます。これは常にJSON配列であり、単数形のnfcオブジェクトになることはありません。ワークフローがNFCを複数回実行する場合(例: ステップアップフロー)は複数のエントリが含まれ、各エントリはそれぞれ独自のnode_idを持ちます。
- セッション判定API:
GET /v3/session/{sessionId}/decision/のトップレベルにnfc_verifications[]として含まれます。セッション判定の取得を参照してください。 - Webhook: NFCステップがデータを生成すると、
status.updatedペイロードに同じnfc_verifications[]配列が含まれます。Webhookを参照してください。 - スタンドアロンNFC: チップを直接送信する場合は、NFCの概要を参照してください。
nfc_skip_reasonフィールドも含まれ、その理由が正確に示されます。理由は、書類にチップがない、発行国の証明書が利用できない、デバイスにNFCリーダーがない、ネイティブSDKなしで認証が実行された(ブラウザからはNFCにアクセスできない)、MRZからチップのアクセスキーを導出できなかった、マイナンバーカードをJPKIで読み取れなかった、またはユーザーがスキップを選択した、のいずれかです。この分類に当てはまらない場合はnullのままです。最も多いのは、ユーザーが試行の途中で放棄した場合(レポートのステータスはNot Finished)や、NFCがまだ保留中のセッションです。正確な値についてはスキップ理由を参照してください。
以前のドキュメントでは単数形の
nfcフィールドが参照されていました。この形式はv3の判定エンドポイントには存在しません。V2 Webhookに明示的に固定されている送信先でのみ現れ、このフィールドにはchip_protocolとjpkiも含まれます。常にresponse.nfc_verifications[0]を読み取り、配列を反復処理してください。スキーマ
フィールドごとの正式なスキーマは、データモデルのリファレンスページにあります。以下のフィールドは、その正式なスキーマと同じ内容です。ステータスの値
2つの証明書の警告(
DSC_CERTIFICATE_REVOKED、DSC_CERTIFICATE_EXPIRED)は情報提供のためのものです。warnings[]には表示されますが、それ単独でNFCのstatusが変わることはありません。動作の一覧はNFCの警告を参照してください。例
Approved: チップの読み取りに成功し、暗号学的にも有効
Declined: OCRとチップのデータの不一致
マイナンバーカード (JPKI)
ネイティブSDKでは、マイナンバーカードはJPKIを通じて読み取られます。本人がカードのPINを入力し、カードがワンタイムチャレンジに署名します(仕組みを参照)。そのレポートはchip_protocol: "jpki"となり、証拠をjpkiの下に格納します。カードにはICAOデータが含まれないため、portrait_image、signature_image、chip_data、authenticity、certificate_summaryはnullになります。
JPKIフィールド
レポートには、証明書そのもの、そのシリアル番号、署名、およびカードの12桁の個人番号(マイナンバー)が含まれることはありません。個人番号はNFCステップで読み取られることもありません。
マイナンバーカードの読み取り例
revocation_status: "unchecked"となり、JPKI_REVOCATION_UNCHECKED警告が付き、デフォルト設定ではstatus: "In Review"になります。NFCの警告を参照してください。
セキュリティに関する注意
NFCチップのデータは発行機関によって署名されているため、sod_integrity: trueかつdg_integrity: trueの承認済みレポートは、Diditが提供できる最も強力な本人確認の証拠です。署名付き画像URL(portrait_image、signature_image)は短期間のみ有効なものとして扱ってください。速やかにダウンロードし、公開される場所にキャッシュしないでください。新しいリンクが必要な場合は、判定を再度リクエストしてください。
関連情報
- NFCの警告:警告のenum、原因、対処方法の一覧。
- Webhook:
status.updatedイベントをリッスンしてNFCレポートを受け取ります。 - データモデル:NFC認証:すべてのフィールドを含む正式なスキーマ。
- 対応書類:DiditがNFCで読み取れる電子書類。