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

署名検証結果の保存と再取得

署名検証 API は、署名検証の結果と検証に使われたデータ(署名値、署名に使用した証明書、署名に使用されたデータのダイジェスト)を返します。 同時に署名を検証した結果を識別する検証 ID を返します。 署名検証結果の取得 API を用いることで、検証 ID に紐づく署名検証の結果と検証に使われたデータをいつでも再取得することができます。

要確認

SP 事業者は、証明書の生データの保持が禁じられています。 署名に使用した証明書の生データは署名検証時に検証サーバが保存しており、 署名を再検証する必要が出てきた場合、サーバで保存している証明書データを使用して署名を再検証できます。

Verify API は、これら署名検証結果のほか、署名に使用された証明書の生データおよび検証時刻時点での証明書失効状態も保存しています。 SP 事業者側で検証 ID と署名対象の実データを保存しておくことで、必要な場合にいつでも再検証することができます。 この機能は API として提供されておらず、再検証が必要な場合は個別にお問い合わせください。

SP 事業者側が保管している検証 ID や署名対象のデータを削除した場合や、 削除系 API を呼びだして各種データを削除した場合には、再検証ができなくなります。 契約書の保管要件などが課される事業者は十分ご注意ください。

実装例

クライアントライブラリのセットアップ方法は、クライアントライブラリをご参照ください。

package main

import (
"bytes"
"context"
"crypto/sha256"
"fmt"
"log"
"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"
)

var (
// APIエンドポイントを指定します。この値は環境によって異なります。
baseUrl = "https://verify.mock.p8n.app"

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

// 署名対象のドキュメントです。署名作成時と同じものを指定しています。
document = "Hello, world!"

// 検証IDです。この値は、署名検証の結果として取得できます。
verificationID = "80375018-3502-4eb7-b422-0898dcf140b5"
)

func run() error {
// 署名結果再取得リクエストを作成します。
request := connect.NewRequest(&verifyv2.GetVerificationRequest{
VerificationId: verificationID,
})

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

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

// 署名結果再取得リクエストを送信します。
response, err := client.GetVerification(context.Background(), request)
if err != nil {
return err
}

// 文書のハッシュ値を計算します。
digest := sha256.Sum256([]byte(document))

// 署名対象のダイジェストが一致することを確認します。
if bytes.Equal(digest[:], response.Msg.Verification.Digest) {
fmt.Println("OK: digest matches")
} else {
fmt.Println("NG: digest does not match")
}
return nil
}

func main() {
if err := run(); err != nil {
log.Fatalln(err)
}
}

リクエストに成功すると、以下のように結果が表示されます。

OK: digest matches

次のステップ

利用者の識別機能を利用して、1 人 1 アカウントの実現や、当人認証によるログインを実装しましょう。

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