署名トランザクションの結果取得
このページでは、マイナンバーカードでの署名が完了した後、署名トランザクションの結果(署名データと電子証明書)を取得する方法を説明します。
取得した署名データは、次のステップで PocketSign Verify API に送信し、署名の検証を行います。
シーケンス
実装例
package main
import (
"fmt"
"io"
"net/http"
)
const (
// デジタル認証アプリサービスの署名トランザクション API エンドポイント
signUrl = "https://sb-auth-and-sign.go.jp/api/sign-transactions"
// 署名トランザクション開始時に取得したトランザクション ID です。実際の値で置き換えてください。
signTxId = "37a52ac8-b232-ebac-a454-04d68916489f"
// 認可コードフローで取得したアクセストークンです。実際の値で置き換えてください。
token = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhVFN4RHpxM1B6c2dhak0wN3YzWmxGSm8tajBWUGdaVWQ1d0NPOUJydkx3In0..."
)
func run() error {
// 署名トランザクション結果取得リクエストを作成します。
// GET /api/sign-transactions/{signTxId}/result で署名結果を取得
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/%s/result", signUrl, signTxId), nil)
if err != nil {
return fmt.Errorf("failed to create request: %w", err)
}
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
// 署名トランザクション結果取得リクエストを送信します。
resp, err := http.DefaultClient.Do(req)
if err != nil {
return fmt.Errorf("failed to send request: %w", err)
}
defer resp.Body.Close()
// レスポンスを読み込みます。
respBody, err := io.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("failed to read response body: %w", err)
}
// 署名結果を表示します。
// 結果には署名データと電子証明書が JWE 形式で含まれています
fmt.Println(string(respBody))
return nil
}
func main() {
if err := run(); err != nil {
panic(err)
}
}
実行結果
署名トランザクションの結果取得に成功すると、以下のようなレスポンスが返されます:
レスポンスの説明
state: "SIGNED"
: 署名が正常に完了したことを示すsign_certificate_jwe
: 署名データと電子証明書を含む JWE トークン(次の検証ステップで使用)
{
"sign_transaction_id": "37a52ac8-b232-ebac-a454-04d68916489f",
"client_id": "RP00000001",
"state": "SIGNED",
"expiration_datetime": "2022-01-01T00:00:00+09:00",
"request": {
"title": "署名APIのテスト",
"identification_code": "0001",
"data": "XIh3yqL9yiAUQkuovXqx+xKZOwameHZx7OCoTRdlJrQ="
},
"response": {
"sign_certificate_jwe": "cHUwotN3V05o4sHRhA..."
}
}
次のステップ
取得した sign_certificate_jwe
を PocketSign Verify API に送信して、署名の検証を行いましょう。
その他、デジタル認証アプリサービス API の使い方やエラーの詳細等については、デジタル認証アプリのマニュアルをご覧ください。