内部認証データの検証
このページでは、Verify SDK を使用して取得した内部認証データの検証を行う方法を説明します。
内部認証データの検証が成功した場合、Verify API から生年月日情報が返却されます。
あらかじめAPI の利用開始を完了し、API トークンを取得しておいてください。
シーケンス
アプリとバックエンドの連携
Verify SDK を用いて取得した内部認証データは、何らかの方法でバックエンドサーバーに共有して検証を行ってください。
以下の実装例では、アプリとバックエンドの間での連携については省略しています。 実際のアプリケーションの実装例については、サンプルアプリをご覧ください。
要確認
Verify API の利用は、必ず バックエンドサーバを経由して行ってください。 API トークンをアプリケーションに含めて配布することは Verify API の不正利用につながるため、絶対に行わないでください。
実装例
クライアントライブラリのセットアップ方法は、クライアントライブラリをご参照ください。
- Go
- TypeScript
- Kotlin
- Swift
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 リファレンスをご覧ください。