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

署名トランザクションの結果取得

このページでは、マイナンバーカードでの署名が完了した後、署名トランザクションの結果(署名データと電子証明書)を取得する方法を説明します。

取得した署名データは、次のステップで 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 の使い方やエラーの詳細等については、デジタル認証アプリのマニュアルをご覧ください。