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

最新の基本4情報取得の同意

ここでは、Verify SDK を使用して取得した同意データを用いて、同意を行う方法を説明します。

あらかじめAPI の利用開始を完了し、API トークンを取得しておいてください。

注意

テナントを作成した段階では、 最新の基本4情報の取得に関係する API は無効化されているため利用できません。

利用するにはお問い合わせください。

シーケンス

アプリとバックエンドの連携

Verify SDK を用いて取得した同意データは、何らかの方法でバックエンドサーバーに共有して同意を行ってください。

以下の実装例では、アプリとバックエンドの間での連携については省略しています。 実際のアプリケーションの実装例については、サンプルアプリをご覧ください。

要確認

Verify API の利用は、必ず SP 事業者で管理するサーバを経由して行ってください。 API トークンをアプリケーションに含めて配布することは、Verify API の不正利用ひいては JPKI への不正なアクセスにつながるため、絶対に行わないでください

実装例

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

package main

import (
"context"
"encoding/base64"
"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>"

// 同意データです。これらの値は、アプリ上で作成したものを何らかの方法で予め受け取っておいてください。
rawApplication = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPOWIqeeUqOiAheWQjOaEj+eUs+iri+aDheWgsT4855Sz6KuL5pu4PjznlLPoq4vml6U+MjAyMy8wNi8xNDwv55Sz6KuL5pelPjznlLPoq4vmmYLplpM+MTA6MTk6NTQ8L+eUs+iri+aZgumWkz4844K144O844OT44K5SUQ+c2FtcGxlPC/jgrXjg7zjg5PjgrlJRD4844K144O844OT44K55LqL5qWt6ICFSUQ+c2FtcGxlPC/jgrXjg7zjg5Pjgrnkuovmpa3ogIVJRD485Yip55So6ICF5ZCM5oSP5oOF5aCxPjzkvY/miYA+MTwv5L2P5omAPjzmsI/lkI0+MTwv5rCP5ZCNPjznlJ/lubTmnIjml6U+MTwv55Sf5bm05pyI5pelPjzmgKfliKU+MTwv5oCn5YilPjwv5Yip55So6ICF5ZCM5oSP5oOF5aCxPjwv55Sz6KuL5pu4PjxTaWduYXR1cmU+PFNpZ25lZEluZm8+PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSI+PC9DYW5vbmljYWxpemF0aW9uTWV0aG9kPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ij48L1NpZ25hdHVyZU1ldGhvZD48UmVmZXJlbmNlPjxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSI+PC9UcmFuc2Zvcm0+PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1Ij48L1RyYW5zZm9ybT48L1RyYW5zZm9ybXM+PERpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiI+PC9EaWdlc3RNZXRob2Q+PERpZ2VzdFZhbHVlPlpIalo3bjY4bU56dmdlSE84dWZhZjVaTGtCbkFscnJnQU1yQ1lhL3YzSzA9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8+PFNpZ25hdHVyZVZhbHVlPlZ3SFlTQWxod3VlNkQyUGsycXhGNjFhaWtnbjVlbnVoNjhtdlVVUTZYVkpxdG1uZ3hFS1VhOWxkbkpBei9CaHQ4cXczNjEyZHllWGdWZmo2djBqckdaSE91dEZHd0oxN3diRHBOajgvV2tsanpvRFdxeWYxbjdnLzN0Z0piTG8yWkhtdDNHTFhvRnhNa2RXMmI1SnFVZllJc0FjL3pVL0ZybW8zbFFOKzFxUEE5dVo2SDRtV3JUL3B6bU1vY2RUU1dSUFVHcGdHSkYvVUlzallRNUVZZDJTaTdRTFFLZC9XQmVvdFRuOHQwNzhpVHg1VFFwUVRIVjgwTUNURlFGa1I3WlNaaUZCZkFlQkduOU5zdzkwQVJOdVZJZFhxQ0cyT3paYThLSHVRd2NyL2czWkJiUXV6NEEySmc4eDc1UE4zSDhKZFU3L1Z5Ty9CS2diQ0xUay90dz09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE+PFg1MDlDZXJ0aWZpY2F0ZT5NSUlHa3pDQ0JYdWdBd0lCQWdJVUlKSUgxd0FBQUFBQUFDQUFBQUFBQUFBQUFBQXdEUVlKS29aSWh2Y05BUUVMQlFBd1hqRUxNQWtHQTFVRUJoTUNTbEF4RVRBUEJnTlZCQW9NQ0ZBNFRpMU5UME5MTVNJd0lBWURWUVFMREJsUU9FNGdabTl5SUdScFoybDBZV3dnYzJsbmJtRjBkWEpsTVJnd0ZnWURWUVFMREE5UWIyTnJaWFJUYVdkdUlFbHVZeTR3SGhjTk1qSXdOREEzTVRJMU16RTFXaGNOTWpjd05EQTJNVEkxTXpFMVdqQmNNUXN3Q1FZRFZRUUdFd0pLVURFVk1CTUdBMVVFQnd3TVVISmxabVZqZEhWeVpTMHdNUTh3RFFZRFZRUUhEQVpEYVhSNUxUQXhKVEFqQmdOVkJBTU1IREl3TWpJd05EQTNNVEkxTXpFMU1EQXdNREF3TURBd01EQXdNREF3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ0JxdzE5TllVelZ4RnI5ajU5djhaYytjaEMvQjZGSERCNlcxQXNRclpWT1RFSmlHeDh3QUk5czE3STJsUkJQclMyTERYcnVVRFNZQmpyNE00eER6ZnpPZkFDNkxmdnkyUytJSkJRd0o1bS9kTmpyV1RLcVlKSEt3d2pZd0gyUm54bCt0Rm4wdzlZMGxjeFUvUlhwanM5VWs4Y1VIeHhFRmVCMVJHdEFOM3pyb3lML0JMcWJpZ3h3L2pXTmQ5RzVvelVwUkhVUzR5NllKdSsxWnljTmVzejh6cU9JN252emdJc0pscDU5RmwzSjhqbFlQbmhUeWZoNCs4dDlzWWtLVFRwL250bkI4bUJ6UFp4V1FtNTZLVnJEL3p2MW1VeXVjQmdtREQ5bTJQZjRPQkxidFR3NzhRSDVCdXNpejhWRm9jR2gweGF4VzFrdUtXOWN4cmR6RnVMQWdNQkFBR2pnZ05KTUlJRFJUQU9CZ05WSFE4QkFmOEVCQU1DQnNBd2dkMEdBMVVkRVFTQjFUQ0IwcUFmQmdvcWd3aU1tMVVJQlFVQm9CRU1EK1d1cnVXMGp1T0FnT1dFcXVpaG82QVpCZ29xZ3dpTW0xVUlCUVVFb0FzTUNUTXhPVGcxTURVeU5xQVJCZ29xZ3dpTW0xVUlCUVVEb0FNTUFUS2dSZ1lLS29NSWpKdFZDQVVGQmFBNEREYm9qS2psbjQ3bm5Jem9vWXptbHJubHVJTHBuWkxtc3J6dnZKSHZ2Skx2dkpidnZKRG5sYXJ2dkpudnZKbnZ2Sm52dkpubGo3ZWdGUVlLS29NSWpKdFZDQVVGQXFBSERBVXdNREF3TUtBaUJnb3Fnd2lNbTFVSUJRVUdvQlFNRWpBd01EQXdNREF3TURBd01EQXdNREF3TURBNkJnTlZIU0FCQWY4RU1EQXVNQ3dHQ2lzR0FRUUJnOXNIQVFFd0hqQWNCZ2dyQmdFRkJRY0NBUllRYUhSMGNEb3ZMM0E0Ymk1c2IyTmhiRENCdlFZRFZSMFNCSUcxTUlHeXBJR3ZNSUdzTVFzd0NRWURWUVFHRXdKS1VERXpNREVHQTFVRUNnd3E0NE9kNDRLeDQ0T0Q0NE9JNDRLMTQ0S2s0NE96NDRPaTQ0T0Q0NEt2NDRLMTQ0Tzg0NE9UNDRLNU1Ud3dPZ1lEVlFRTEREUGpnNTNqZ3JIamc0UGpnNGpqZ3JYamdxVGpnN1BqZzZMamc0UGpncS9qZ3JYamc3empnNVBqZ3JubnZiTGxrSTNubEtneEtqQW9CZ05WQkFzTUllT0RuZU9Dc2VPRGcrT0RpT09DdGVPQ3BPT0RzK2FncXVXOGorUzhtdWVrdmpDQnJnWURWUjBmQklHbU1JR2pNSUdnb0lHZG9JR2FwSUdYTUlHVU1Rc3dDUVlEVlFRR0V3SktVREVSTUE4R0ExVUVDZ3dJVURoT0xVMVBRMHN4SWpBZ0JnTlZCQXNNR1ZBNFRpQm1iM0lnWkdsbmFYUmhiQ0J6YVdkdVlYUjFjbVV4SURBZUJnTlZCQXNNRjBOU1RDQkVhWE4wY21saWRYUnBiMjRnVUc5cGJuUnpNUlV3RXdZRFZRUUxEQXhRY21WbVpXTjBkWEpsTFRBeEZUQVRCZ05WQkFNTURFTnBkSGt0TUNCRFVreEVVRENCaGdZRFZSMGpCSDh3ZllBVUZOTjVpZzc1aHZXTXQrRjlhdjBiTGh5akxnMmhZcVJnTUY0eEN6QUpCZ05WQkFZVEFrcFFNUkV3RHdZRFZRUUtEQWhRT0U0dFRVOURTekVpTUNBR0ExVUVDd3daVURoT0lHWnZjaUJrYVdkcGRHRnNJSE5wWjI1aGRIVnlaVEVZTUJZR0ExVUVDd3dQVUc5amEyVjBVMmxuYmlCSmJtTXVnZ0VCTUIwR0ExVWREZ1FXQkJSNGF3bDJOUFlQdjg5UmRxSHhUbTVVNDJpRUpUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFlZm9Hem0zenhBcW1Ed2kwMkxKc3pidm1Ib1hOVlRuampnVDlnbE5ycGl3M3F0QUNIUEtLY1MzOUpxRTV0QXZKczd1Tk1jVlIwWkkxZko5d3NKc0F0THBtKzBINjZPUkdpUlNyWmVvZlA3QjlBQzZGaFVXczdFQ2JDRnJsZGp6czJyRlVlR1hBaU9vaTdnMldRSjc1UHpzWFF5cmZEcm9va3lSQVZJK0s0eU5wRXpDWmhzbml3aktKU1poWFl2VDJqZ3ZqR3E2YnhEc0l3QzBjTVlGZmRaYmM3YjNUeTNmdE9zOTVtWVpvOHEvcW0zSGErMS9kQndsSTI2N09TZ2JzS3FsYzBsVlJWN1I4TUpqa3J4OUM0RjBRRkdCMlRhRGNxWGo2VmVJanZIYTdZaXdhMU02YzVKOXpnaVl3K3FzUEo2VkoyQW8yY0lna0FpRTl1WVFSSWc9PTwvWDUwOUNlcnRpZmljYXRlPjwvWDUwOURhdGE+PC9LZXlJbmZvPjwvU2lnbmF0dXJlPjwv5Yip55So6ICF5ZCM5oSP55Sz6KuL5oOF5aCxPg=="
)

func run() error {
// Base64をデコードしてバイト列にします。
application, err := base64.StdEncoding.DecodeString(rawApplication)
if err != nil {
return err
}

// 同意リクエストを作成します。
request := connect.NewRequest(&verifyv2.CreateConsentRequest{
// SDKから得られた同意データを送信します。
Application: application,
})

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

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

// 同意リクエストを送信します。
response, err := client.CreateConsent(context.Background(), request)
if err != nil {
return err
}

// 結果を表示します。
fmt.Printf("Certificate: %s\n", response.Msg.Certificate.Id)
return nil
}

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

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

Certificate: 53e8bf1c-44ef-4a48-b02b-cfad42e1ceda
要確認

同意データには、マイナンバーカードから取得した証明書の生データが含まれます。

SP 事業者は、証明書の生データの保持が禁じられているため、Verify API に送信後は速やかに削除するようにご実装ください。


次のステップ

同意時に作成される証明書 ID を利用し、最新4情報の取得を行いましょう。

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