2024年2月1日木曜日

Entra Verified ID+Microsoft Authenticatorで顔マッチングを行う

こんにちは、富士榮です。

そういえば以前のIgnite?Build?でEntra Verified ID+Microsoft Authenticatorの組み合わせのパターンを使うとVerifiable Credentialsを提示する際に、VC内に埋め込んだ顔写真と自撮りのマッチングをすることでVCの持ち主の検証もできるよ、というデモが公開されていたんですが、自前でIssuer/Verifierを実装する場合のサンプルコードが公開されています。(しばらく前に公開されていましたが見る時間が無かったのですがようやくコードを読めました。実際に動かしてはいないです。デモサイトでは試したのですが)

今回見ていくコードはこちらの中のnode.js版です。

VCの定義を見ると、こんな感じで写真属性を定義しています。
- Displayファイル
{
"claim": "vc.credentialSubject.photo",
"label": "User picture",
"type": "image/jpg;base64url"
}
- Rulesファイル
{
"outputClaim": "photo",
"required": false,
"inputClaim": "photo",
"indexed": false
}
これらの定義を入れたVCを発行するようにIssuerを設定すればIssuer側は完了です。

実際の顔マッチングはVerifier側の処理となりますので、verifier.jsを見るとこんな感じでfaceCheckのフラグの状態を見て、presentationConfigに写真Claimの名称とマッチングのスレッショルド(マッチ度合いでOK/NGを返す値)を指定しています。
if ( req.query.faceCheck && req.query.faceCheck == "1"
&& !presentationConfig.requestedCredentials[0].configuration.validation.faceCheck ) {
var photoClaim = mainApp.config["sourcePhotoClaimName"] || photo;
var confidenceThreshold = parseInt(mainApp.config["matchConfidenceThreshold"]) || 70;
presentationConfig.requestedCredentials[0].configuration.validation.faceCheck = {
sourcePhotoClaimName: photoClaim,
matchConfidenceThreshold: confidenceThreshold
};
}

あとは基本的に従来通りcreatePresentationRequestのエンドポイントにアクセスすれば良いのですが、まだ顔マッチングがベータの機能ということもあり、APIバージョンをbetaにしないといけません。
if ( payload.includes("faceCheck")) {
client_api_request_endpoint = client_api_request_endpoint.replace("/v1.0/", "/beta/");
}

あとは細かい部分で何箇所か変更する部分もありますが、基本はこの部分が顔マッチング機能を使う場合にVerifier側で対応すべきところです。

これで単純なVC提示に加えて顔マッチングを組み込むことができそうですね。

0 件のコメント: