メインコンテンツまでスキップ

署名検証

このページでは、デジタル認証アプリによって作成された署名データの検証を PocketSign Verify API で実行します。

シーケンス

実装例

以下のコード例では、デジタル認証アプリで作成した署名データを PocketSign Verify API に送信し、署名の正当性と証明書の情報を検証します。

package main

import (
"context"
"fmt"
"net/http"

"buf.build/gen/go/pocketsign/apis/connectrpc/go/pocketsign/verify/v2/verifyv2connect"
verifyv2 "buf.build/gen/go/pocketsign/apis/protocolbuffers/go/pocketsign/verify/v2"
"connectrpc.com/connect"
)

const (
// APIエンドポイントを指定します。テスト環境の URL を指定します。
baseUrl = "https://verify.test.p8n.app"

// Verify API のトークンです。ご自身のトークンに置き換えてください。
token = "<YOUR_API_TOKEN>"

// 署名トランザクション開始リクエストで送信したデータ(Base64 エンコード済みハッシュ)をそのまま指定してください。
data = "XIh3yqL9yiAUQkuovXqx+xKZOwameHZx7OCoTRdlJrQ="

// 署名トランザクション結果取得レスポンスから返却された `response.sign_certificate_jwe`(署名データと証明書を含む JWE トークン)をそのまま指定してください。
signCertificateJwe = "cHUwotN3V05o4sHRhA..."
)

func run() error {
// 署名検証リクエストを作成します。
// SignCertificateJwe: デジタル認証アプリから取得した JWE トークン
// Data: 署名対象データのハッシュ値
request := connect.NewRequest(&verifyv2.VerifyForDigitalIdentificationAppRequest{
SignCertificateJwe: signCertificateJwe,
Data: data,
})

// リクエストにAPIトークンを設定します。
request.Header().Set("Authorization", "Bearer "+token)
request.Header().Set("X-P8N-OptIn", "PREVIEW")

// APIクライアントを作成します。
client := verifyv2connect.NewVerificationServiceClient(http.DefaultClient, baseUrl)

// 署名検証リクエストを送信します。
response, err := client.VerifyForDigitalIdentificationApp(context.Background(), request)
if err != nil {
return err
}

// 検証結果を表示します。
// Result: 署名検証の結果(RESULT_OK = 成功)
// CommonName: 署名者の氏名(マイナンバーカードから取得)
fmt.Printf("Result: %s\n", response.Msg.Verification.Result)
fmt.Printf("CommonName: %s\n", response.Msg.CertificateContent.GetJpkiCardDigitalSignatureContent().CommonName)
return nil
}

func main() {
if err := run(); err != nil {
panic(err)
}
}

実行結果

Result: RESULT_OK
CommonName: 公的 花子

次のステップ

その他、Verify API の詳しい使い方やエラーの詳細等については、API リファレンスをご覧ください。