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

署名トランザクションの開始

このページでは、デジタル認証アプリサービス API を使用して署名トランザクションを開始する方法を説明します。

シーケンス

実装例

注意

署名用電子証明書は契約書等への電子署名を目的としており、単純に個人情報を取得するという目的のためには利用できません。 個人情報を取得するだけの目的で証明書を取得することや、意味のない情報に署名させることはおやめください。

以下のコード例では、「利用規約に同意します。」という文字列を署名対象として、署名トランザクションを開始します。

署名対象データ

利用規約に同意します。
注記

XML 署名を作成する場合など、DigestInfo を用いた署名が必要な場合は、DigestInfo を付与したハッシュを用いた署名作成を参照してください。

package main

import (
"bytes"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
)

const (
// デジタル庁から発行されたクライアント ID です。ご自身のクライアント ID で置き換えてください。
clientID = "<YOUR_CLIENT_ID>"
// 署名トランザクション開始エンドポイント
startTxURL = "https://sb-auth-and-sign.go.jp/api/sign-transactions"
// 署名するデータ
signDoc = "利用規約に同意します。"
// クライアントクレデンシャルフローによって取得したトークン
token = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhVFN4RHpxM1B6c2dhak0wN3YzWmxGSm8tajBWUGdaVWQ1d0NPOUJydkx3In0..."
)

func run() error {
// 署名対象データの SHA-256 ハッシュ値を計算します。
hash := sha256.Sum256([]byte(signDoc))
digest := base64.StdEncoding.EncodeToString(hash[:])
fmt.Println("digest:", digest)

buf := bytes.NewBuffer(nil)
if err := json.NewEncoder(buf).Encode(map[string]any{
// クライアントID
"client_id": clientID,
// 署名対象データ名
"title": "署名APIのテスト",
// 署名対象識別コード (利用者に表示し、署名対象を識別するID)。ここでは、"0001"を指定します。
"identification_code": "0001",
// 署名対象データ:署名対象を SHA-256 によって生成したハッシュ値を Base64 エンコードしたもの
"data": digest,
}); err != nil {
return fmt.Errorf("failed to encode request body: %w", err)
}

// リクエストを作成します。
req, err := http.NewRequest(http.MethodPost, startTxURL, buf)
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)
}

fmt.Println(string(respBody))
return nil
}

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

実行結果

署名トランザクションの開始に成功すると、以下のようなレスポンスが返されます:

digest: XIh3yqL9yiAUQkuovXqx+xKZOwameHZx7OCoTRdlJrQ=
{
"sign_transaction_id": "37a52ac8-b232-ebac-a454-04d68916489f",
"client_id": "RP00000001",
"state": "CREATED",
"expiration_datetime": "2022-01-01T00:00:00+09:00"
}

次のステップ

署名トランザクションを開始できたら、次のステップとしてデジタル認証アプリを用いたマイナンバーカードによる署名を行いましょう。

その他、デジタル認証アプリサービス API の使い方やエラーの詳細等については、デジタル認証アプリのマニュアルをご覧ください。