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

内部認証データの検証

このページでは、Verify SDK を使用して取得した内部認証データの検証を行う方法を説明します。

内部認証データの検証が成功した場合、Verify API から生年月日情報が返却されます。

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

注意

テナントを作成した段階では、券面事項に関係する API は無効化されているため利用できません。

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

シーケンス

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

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

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

要確認

Verify API の利用は、必ず バックエンドサーバを経由して行ってください。 API トークンをアプリケーションに含めて配布することは Verify API の不正利用につながるため、絶対に行わないでください

実装例

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

package main

import (
"context"
"crypto/sha256"
"encoding/base64"
"fmt"
"log"
"net/http"

"buf.build/gen/go/pocketsign/apis/connectrpc/go/pocketsign/cardinfo/v1/cardinfov1connect"
cardinfov1 "buf.build/gen/go/pocketsign/apis/protocolbuffers/go/pocketsign/cardinfo/v1"
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>"

// チャレンジとして送信したNonceです。
nonce = []byte{0xCA, 0xFE, 0xBA, 0xBE}

// Verify SDKによって券面事項確認APから読み出されたデータです。これらの値は、アプリ上で作成したものを何らかの方法で予め受け取っておいてください。
rawVerificationPublicKey = "fyGCAjNfToIBKTEwMDAwMDEIBTAwMQAAAAA2NDQxMTc2CAUwMDEAAAAAkAMBAAGRggEAmfy3KTSqU9QSwA05TehkOph/DhxrfPMd3opwsfjoHulVXtEsgFG8J+har+/dI2Pb165pQia7OhJiYHrdzgPq0A3eGx50rOhzTTV+weQZ1XOLzprsB6BN9oaI1kG3BFrl6WLZbbUs73DiljJPbshcJK4rka4RwW9BP6Ohp483Tt/KGK8VkZfGxtJsb2HbHluJUtSeR0Tp2zm/f9OUi35Oj68npEOuRzWssvsJNuaS7bq5calMsx24ed7WaQ5/H/s5r+scibFALGhBpzed5gi3GQAP8Drse7KIGCpr/BxX5k7Qtx2y9TBSTwGVoQbEpFvf2QLPI1Dcod259KhXE3lHJV83ggEAVGODwxzayAqlb65JUXvTMQnM17TDCPaJRZ9ZuUNpGE374sg86BMJ49UDNKeGcGNYlB7jxQqWdXslP1qMtqk+P/aDh5BgNALURNqwWh6ssPG2XYVgIv9MO2jxX8a3wp2gLRpccVXCPZtXK2Gz+MNg5C0pzP/pGp+qhv8KbMvQ7Lwg0JeomTZslNS3wBYvsS3E7yLcTI697xrkvK/VRiKjDUiOW8sHsJiD2DVhicfh6r1PwsQ1aCReeCqEf6dtRTwg1ycT0I70WkiuarY2sib0Nq2dA+1f27PVTLUmupFtFCzmcUilGioZ3PME/A0MvuN3ayXgG4hVr8CiBDCVPUqWwg=="
rawAuthenticationSignaure = "SPzVptSYxa56R2nyMldup21y/RBuJj7GjwTxRMkY2O19NKysI4NaV1RRmXpbsTL0SBVucFvkUKs8xL5At92WKsfY92nDSeJkCMBHAa9lcep8NEdEBNNb9yOe2wWHSkJ3NoudgFC9Bp7e9vmOmpAsSIEkJzciBTfnkmGvnu4wdshAqEXIbteQrbm7s5OyKJLZxlWZIBP9Il/G/RFOYw45Q299t5hjjIanCJCBx9eNuuZk+n8y8pQJNZFnt6y46NDC2R+qTkV/2bssiwr0s3hEMytbu6GE8xq0m8bChA218mp5d4aZn/E9uCJbZUJbejCvUhNzWbxZJ5+ROvLf7B1GdA=="
rawDateOfBirthContent = "/xCCAh7fEQgxOTg1MDUyNt8SggEJkAMBAAGRggEAknqGa3WCOn7AVZ5TPQgtyh4U5jtOwRtHeB9VJ/C+ulPuCAQ32wAYStOrmh9vfbpH/nvV7zVnvJDmSho7agHCsaTN4mCPU+tSpmKWTsrSWwCHm81YPhBaL74P8jiBKul16wdHeBiV+kJcHDruKP0dttcokz84b5u2mLFIHiLZLUn2NmKm8TeC8LFmzVgzheB6AsUat7VS85Ga6W3DkG6Jm/4PTMv0zKPtlcjdaQnTW0d7+HMsNjY3KxjlPGJsggySe80fyp61zZvvkM3ITflI3ZVL6fNdAdio673HFp9k/I9YOMxYewtwiUD8BQ9+etXgWg9qC6hWoVVSOqfrZt2WDd8TggEACYSEVS9Xb60ri5QBRXHHBdoyhl1TyWaTgqxoj4sO7M+TcQEwcaxGGO9W+z+W6iYdHX5Xt3KA0N7VCBxZ/Kaat/fyAH3Ql0tA+dPPUObP1AxSxg1q4GwUgCUHsGspS9F7/iuJ1jMrEi25jABZLS7ZNRm5tU3k1kvwjUL+RVZ74ecoIXfhCQHkQDHGZuu9v3lNRZsu42f+1OK1JdCd3y+As51AduXJkccrZqJJwt4AyhtS0P3SYLXoOvrNJoQSxhnoWTBiOFkC1yyyvIcXcD607XcrDFylF7uXK7MLtoPVs6HUCm0vQ1ESkXCKO6bjqVw7cg/gI9e3u16HxhB4dvTKzw=="
)

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

// Nonceのハッシュ値を計算します。
digest := sha256.Sum256(nonce)

// 署名検証リクエストを作成します。
request := connect.NewRequest(&cardinfov1.ParseDateOfBirthContentRequest{
VerificationPublickey: verificationPublickey,
AuthenticationSignature: authenticationSignature,
DateOfBirthContent: dateOfBirthContent,
// 作成したハッシュ値を送信します。
// もし、内部認証でNonceと異なる値が署名されていた場合はハッシュ値が一致しないため、検証に失敗します。
Digest: digest[:],
HashAlgorithm: verifyv2.Verification_HASH_ALGORITHM_SHA256,
})

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

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

// 署名検証リクエストを送信します。
response, err := client.ParseDateOfBirthContent(context.Background(), request)
if err != nil {
return err
}

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

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

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

DateOfBirth: 19850526

次のステップ

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