ドライバーからSmartHRのライブラリkijiを呼び出し、署名付きxmlを生成します。さらにcurlコマンドで検証環境に署名付きxmlを送信して、e-Govのレスポンス等を確認します。
curlコマンドでは、以下のパラメタ、リクエストURIを指定して、コマンドプロンプトから起動します。なお、事前にe-Govに検証環境利用申込書を提出して、検証環境利用通知書(検証環境URL、ソフトウェアID)を入手しておく必要があります。
No | パラメタ、リクエストURI | 説明 |
---|---|---|
1 | -X GET又はPOST | |
2 | -d @署名付きxmlファイル名 | POSTコマンド時のみ指定 |
3 | -H "x-eGovAPI-AccessKey アクセスキー" | ユーザ認証で発行されたキーを指定 |
4 | -H "x-eGovAPI-SoftwareID: ソフトウェアID" | 検証環境利用通知書のソフトウェアIDを指定 |
5 | -H "Authorization: Basic認証用情報" | Basic認証用ID:パスワードのBase64形式でエンコードした値 |
6 | リクエストURI | 検証環境向けのhttps形式URI |
最後にe-Govの問題点を定義した上で、マイナポータルAPIで改善できるか考察します。
本編以外にも、e-Gov仕様編、e-Gov公開資料編、実行環境構築編がありますので、必要に応じて参照して下さい。
#1 ユーザ認証
署名付きxmlを生成した上で、ユーザ認証を行います。
##1.1 署名付きxmlを生成する
ドライバーを実行して、register.xmlを生成します。
>ruby make_register_xml.rb
>dir register.xml
2020/08/23 15:30 2,682 register.xml
1 個のファイル 2,682 バイト
0 個のディレクトリ 631,570,432 バイトの空き領域
##1.2 ユーザ認証を行う
検証環境ではBasic認証が必要です。Basic認証用IDとBasic認証用パスワードを半角コロンで連結し、Base64でエンコードした値を用意し、その値をHTTPリクエストのヘッダ部のAuthorizationに設定します。
curlコマンドより、POSTコマンドでリクエストURIにアクセスすると、次の応答が返ってきます。
>curl -X POST -d @register.xml -H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*****************/****/*/**************/login
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<UserID>*********</UserID>
<AccessKey>
78zTKYZQrWdLYgC5cP4oTmalTQE8T7uPF+UDzUEYKZnM4o+teUfNgBGtQsEj6OLsLJX8bW72/B1C
me9RmoZLt/YjnLey59EVKzGKVmv/aHQ9ZCCh9zV6gP1h2B8A4/rQOdiXlS9bQ6YGoahaiJzoooW4
n7dF27OCt71+2yTgG6vMnTify8TYVX7ftazfNUfCPm/XPKTg+4PUnSlcXxPrN8dgRiuv6dSeTZFN
6juFvO+PsXIcxr//WtGvMP0V4cFP
</AccessKey>
<LastAuthenticationDate>20200702213554</LastAuthenticationDate>
</ApplData>
</DataRoot>
<AccessKey>タグにはアクセスキーが設定されています。以後、各種APIを呼び出す際、httpリクエストのヘッダにアクセスキーを必ず指定します。また、<LastAuthenticationDate>タグは前回の認証におけるタイムスタンプです。
##1.3 署名付きxmlの内容を確認する
ドライバーで生成したregister.xmlを確認します。ハッシュ計算及び署名が行われていることが分かります。
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<ApplData Id="ApplData">
<UserID>*********</UserID>
</ApplData>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="20200721144359">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="#ApplData">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>pfQDAIAVdZvrFvZoCTsCp5juOrxd7G1jS168/dFBm7Y=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
Zrm+z6efKMPj2ugb/jFPPAOFasMSRgJDAFv63Qz2XeKnAc5pLPq1F3HXqrcZRY0zueyVkC2ceB9N
3EO+b/cXvpS2egSp4NC2LiFMx02r0qnpgHaxwCEebb5szCq6MgVYE6tL8xzIdP2ToSigMr+16vu9
AkWORFQX0JVyP4J3Fpl3/FvHdPzlId2fwIpZ1GfCdDhgp35oS85RUcP/JLVnqJ9b9V688LQZkP5g
29LqHbsj8626VX6TD6zYQNlr1rTtdoBIGvNs1Ve51ichNfHF4HeA8x7CG/vTN2AsF73dBLBzY0u4
sMD4zEM7nUBbKeuV831DE+2fbxZq+h6r+ThSdg==
</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>
MIIEizCCA3OgAwIBAgIEWCsMRzANBgkqhkiG9w0BAQsFADAuMQswCQYDVQQGEwJKUDERMA8GA1UE
CgwIRGVtb01pbjExDDAKBgNVBAsMA0NBMTAeFw0xOTEwMjUwMTE2NTZaFw0yNDEwMjQxNDU5NTla
MEkxCzAJBgNVBAYTAkpQMREwDwYDVQQKDAhEZW1vTWluMTEMMAoGA1UECwwDQ0ExMRkwFwYDVQQD
DBBJY2hpcm8gTWFkb2d1Y2hpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsD81VFFm
GM26HYdeGrGzbPbadeBzU4WxIE1r6qeZLxjz7DiV42tjo8QFulWZk6hmCeb5j9ChKp+BA/9Yj6us
ccKHZrPQmbcXUZkXRXz9z/7CLxp8b1zAzJakZ0g7o9iU3a3TpyeP6V+GFtkO8YqfthEsJsYzx82d
Ui85Bm4l5pnztozPdXRZd2VJpdwzGqtqw6N9PKzMNWux5C0jklkaPeP5P6NHLfeN51+phkY2xkdJ
lry629PeKjZAwN0Z8Xu0JdubCvA95UctoZgBoOjpgDtWImV3o9hDpwu+1tMlEBhNZIuKOr2G38qR
Z9iJUyoK+XhbzyBUu0A2cwCj0MshbwIDAQABo4IBlDCCAZAwDgYDVR0PAQH/BAQDAgbAMBEGCWCG
SAGG+EIBAQQEAwIGQDBOBgNVHRIERzBFpEMwQTELMAkGA1UEBhMCSlAxHjAcBgNVBAoMFeaooeaT
rOawkemWk+iqjeiovOWxgDESMBAGA1UECwwJ77yj77yh77yRMB8GA1UdIAEB/wQVMBMwEQYPAoM4
ho4xCAEBAAKMmyVkMGgGA1UdEQRhMF+kXTBbMQswCQYDVQQGEwJKUDEeMBwGA1UECgwV5qih5pOs
5rCR6ZaT6KqN6Ki85bGAMRIwEAYDVQQLDAnvvKPvvKHvvJExGDAWBgNVBAMMD+eqk+WPo+OAgOS4
gOmDjjBQBgNVHR8ESTBHMEWgQ6BBpD8wPTELMAkGA1UEBhMCSlAxETAPBgNVBAoMCERlbW9NaW4x
MQwwCgYDVQQLDANDQTExDTALBgNVBAMMBENSTDEwHwYDVR0jBBgwFoAUFNPnlvRSx8XFOnRlLumW
95h4I18wHQYDVR0OBBYEFD6UH9Exye9dEpz9MHJ3sbUDpoZSMA0GCSqGSIb3DQEBCwUAA4IBAQBb
CKyFGsqMv6+HkrY0OK+4v40PJQAa/KbOC3JTKooLfNCNXTiTwtWAl1sGN+Ow8pIp8Yvj16VcYpi8
zO4TmNe8NT+u/e2OvBXwJ9OxOs9UNI2m/mXGcSSJ7eXMR3aVCniDU7IaQeicquQttLP9IOk9Ao1W
+BM35y5bITA/BMO5tzgaimp4G484QtF/XLi40rGhaZAHGEfvl0abJXPumjajhnGv7SCkjw4+9qdz
5Dtp6kl+GVshQgo6ofpEWhVzdhfqKhNy8dNRL7C/gOTYm+M9SAFk9syL5xKXRyMUGDOheypiJrW/
QyOjrxs6cFa5VqaZWcRIq8yVPwABCpGG/hjU
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</DataRoot>
<DigestValue>タグで挟まれている部分がハッシュ値であり、<ApplData>タグ全体をsha256でハッシュ計算した結果です。ハッシュ計算では、ハッシュ値から元の内容を求める事が困難であり、また元の内容を変更するとハッシュ値が変化するという性質があります。
<SignatureValue>タグで挟まれている部分が署名値であり、<SignedInfo>タグ全体を秘密鍵で署名したものです。
<X509Certificate>タグで挟まれている部分が証明書(公開鍵)です。この内容については、検証環境テスト用電子証明書(e-GovEE01_sha2.pfx)の公開鍵の部分と一致しています。
e-Govでは、署名付きxmlを解析し、署名値を公開鍵で復号する事で、送信者本人である事を確認します。さらにハッシュ値が一致する事で改ざんが無いことを確認します。
1.4 ハッシュ値を検証する
ハッシュ値の計算対象は、ユーザIDを含む<ApplData>タグ全体であり、これをSHA-256のアルゴリズムで計算した結果です。この結果が正しいかを確認するため、データ変換ツールを使って検証しました。
データ変換ツールを立ち上げ、<ApplData>タグ全体を変換元(入力)データに設定した上で、次の変換ルールにより変換しました。その結果を署名付きxmlのハッシュ値と比較したところ、結果が一致しました。
- 入力形式(デコード):プレーンTEXT
- 文字コード変換:変換不要
- ハッシュ:SHA-256
- 出力形式(エンコード):BASE64
#2 標準形式による一括申請
curlコマンドを使って、認証、一括申請、送信案件一覧情報取得という順にe-Govにアクセスして、当該手続の状態が「到達」になるまでの各レスポンスを確認します。
##2.1 署名付きxmlを生成する
ドライバーを実行して、標準形式による一括申請の署名付きxmlを生成します。
>ruby make_zip_file_standard_format.rb
ドライバーを実行すると、zip形式ファイルが作成されます。これをデータ変換ツールでBase64形式エンコードに変換して、apply_data.xmlに取り込んで、申請データを作成します。
kousei.xmlの署名情報タグは次のようになります。
<署名情報>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="20200822191454">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="#%E6%A7%8B%E6%88%90%E6%83%85%E5%A0%B1">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>5OBpw3i4ksNiXkS0zjRaeTpdGpX9FqSK+DjyL3J6TPU=</DigestValue>
</Reference>
<Reference URI="900A01020000100001_01.xml">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>Vb10zdwjOtrhECwy/TyswwTqSzEhWQKDc2B1y7j9v3M=</DigestValue>
</Reference>
<Reference URI="%E6%B7%BB%E4%BB%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.docx">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>OAjJfENMRUepWtYYSvAqGnSv6nxx4brjif93tCHopKk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
fhdK4cIq4jAfrGM21nnerwL/U0vob2SMI6nkf1O7WgplbSAqFPooViJqcdk4UbulQlV3mR5WLd23
VphT/QWycbL6q4bav5qmesCE9AaGDexNTkn2Do+eWNAGJbFSSNhAwa+mY0QoMtgbR9tVlXxoYPQ1
9y8ak2WABQPSscAwPGqtb4BsDZMgOJKYqx5zPZlb+EnkC4sxnDMtEPqRjLUFAisQsVynbg3FOy0V
dQ6/psJc6GxCe3qAqCWFpUsLlC7WmiadwcITqgWWiDDBevUDVqLLEdYCcOJzQt4PPpGMNIaRUai+
Mec9e6KvSLnn/TGsnBf7z7nu7o4l1UomnPFUEw==
</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>
MIIEizCCA3OgAwIBAgIEWCsMRzANBgkqhkiG9w0BAQsFADAuMQswCQYDVQQGEwJKUDERMA8GA1UE
CgwIRGVtb01pbjExDDAKBgNVBAsMA0NBMTAeFw0xOTEwMjUwMTE2NTZaFw0yNDEwMjQxNDU5NTla
MEkxCzAJBgNVBAYTAkpQMREwDwYDVQQKDAhEZW1vTWluMTEMMAoGA1UECwwDQ0ExMRkwFwYDVQQD
DBBJY2hpcm8gTWFkb2d1Y2hpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsD81VFFm
GM26HYdeGrGzbPbadeBzU4WxIE1r6qeZLxjz7DiV42tjo8QFulWZk6hmCeb5j9ChKp+BA/9Yj6us
ccKHZrPQmbcXUZkXRXz9z/7CLxp8b1zAzJakZ0g7o9iU3a3TpyeP6V+GFtkO8YqfthEsJsYzx82d
Ui85Bm4l5pnztozPdXRZd2VJpdwzGqtqw6N9PKzMNWux5C0jklkaPeP5P6NHLfeN51+phkY2xkdJ
lry629PeKjZAwN0Z8Xu0JdubCvA95UctoZgBoOjpgDtWImV3o9hDpwu+1tMlEBhNZIuKOr2G38qR
Z9iJUyoK+XhbzyBUu0A2cwCj0MshbwIDAQABo4IBlDCCAZAwDgYDVR0PAQH/BAQDAgbAMBEGCWCG
SAGG+EIBAQQEAwIGQDBOBgNVHRIERzBFpEMwQTELMAkGA1UEBhMCSlAxHjAcBgNVBAoMFeaooeaT
rOawkemWk+iqjeiovOWxgDESMBAGA1UECwwJ77yj77yh77yRMB8GA1UdIAEB/wQVMBMwEQYPAoM4
ho4xCAEBAAKMmyVkMGgGA1UdEQRhMF+kXTBbMQswCQYDVQQGEwJKUDEeMBwGA1UECgwV5qih5pOs
5rCR6ZaT6KqN6Ki85bGAMRIwEAYDVQQLDAnvvKPvvKHvvJExGDAWBgNVBAMMD+eqk+WPo+OAgOS4
gOmDjjBQBgNVHR8ESTBHMEWgQ6BBpD8wPTELMAkGA1UEBhMCSlAxETAPBgNVBAoMCERlbW9NaW4x
MQwwCgYDVQQLDANDQTExDTALBgNVBAMMBENSTDEwHwYDVR0jBBgwFoAUFNPnlvRSx8XFOnRlLumW
95h4I18wHQYDVR0OBBYEFD6UH9Exye9dEpz9MHJ3sbUDpoZSMA0GCSqGSIb3DQEBCwUAA4IBAQBb
CKyFGsqMv6+HkrY0OK+4v40PJQAa/KbOC3JTKooLfNCNXTiTwtWAl1sGN+Ow8pIp8Yvj16VcYpi8
zO4TmNe8NT+u/e2OvBXwJ9OxOs9UNI2m/mXGcSSJ7eXMR3aVCniDU7IaQeicquQttLP9IOk9Ao1W
+BM35y5bITA/BMO5tzgaimp4G484QtF/XLi40rGhaZAHGEfvl0abJXPumjajhnGv7SCkjw4+9qdz
5Dtp6kl+GVshQgo6ofpEWhVzdhfqKhNy8dNRL7C/gOTYm+M9SAFk9syL5xKXRyMUGDOheypiJrW/
QyOjrxs6cFa5VqaZWcRIq8yVPwABCpGG/hjU
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</署名情報>
##2.2 一括申請を行う
curlコマンドで一括申請を行います。「-X POST」「-d @apply_data.xml」等の必要なパラメタを指定します。
HTTPレスポンスでは、<SendNumber>タグに送信番号が設定されています。
>curl -X POST -d @apply_data.xml -H "x-eGovAPI-AccessKey:
78zTKYZQrWdLYgC5cP4oTmalTQE8T7uPF+UDzUEYKZnM4o+teUfNgBGtQsEj6OLsLJX8bW72/B1C
me9RmoZLt/YjnLey59EVKzGKVmv/aHQ9ZCCh9zV6gP1h2B8A4/rQOdiXlS9bQ6YGoahaiJzoooW4
n7dF27OCt71+2yTgG6vMnTify8TYVX7ftazfNUfCPm/XPKTg+4PUnSlcXxPrN8dgRiuv6dSeTZFN
6juFvO+PsXIcxr//WtGvMP0V4cFP"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*****************/****/*/**************/apply
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007231845376104</SendNumber>
<SendDate>20200723184537</SendDate>
<SendFileName>apply_data.zip</SendFileName>
<SendApplyCount>1</SendApplyCount>
<ErrorCount>0</ErrorCount>
</ApplData>
</DataRoot>
##2.3 送信案件一覧情報を取得する
curlコマンドで送信案件一覧情報を取得します。一括申請のレスポンスで取得した送信番号「202007231845376104」をリクエストURIのパラメタとして設定する点に留意します。
>curl -X GET -H "x-eGovAPI-AccessKey:
78zTKYZQrWdLYgC5cP4oTmalTQE8T7uPF+UDzUEYKZnM4o+teUfNgBGtQsEj6OLsLJX8bW72/B1C
me9RmoZLt/YjnLey59EVKzGKVmv/aHQ9ZCCh9zV6gP1h2B8A4/rQOdiXlS9bQ6YGoahaiJzoooW4
n7dF27OCt71+2yTgG6vMnTify8TYVX7ftazfNUfCPm/XPKTg+4PUnSlcXxPrN8dgRiuv6dSeTZFN
6juFvO+PsXIcxr//WtGvMP0V4cFP"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply;id=202007231845376104
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007231845376104</SendNumber>
<SendDateFrom></SendDateFrom>
<SendDateTo></SendDateTo>
<PackageApplyCount>1</PackageApplyCount>
<PackageApply>
<No>1</No>
<SendNumber>202007231845376104</SendNumber>
<SendDate>20200723184537</SendDate>
<WorkStatus></WorkStatus>
<NormalCount>1</NormalCount>
<AllCount>1</AllCount>
<SupplementaryMessage></SupplementaryMessage>
<ErrorCount>0</ErrorCount>
<ErrorFile></ErrorFile>
<ApplyCount>0</ApplyCount>
</PackageApply>
</ApplData>
</DataRoot>
この段階では、一括申請のデータ形式チェックが行われている状態で、申請案件一覧情報項目の<apply>タグが出力されていません。
しばらくして、もう一度、同じコマンドを実行すると、レスポンスの<Status>タグより、形式チェックが終わり、到達状態に遷移している事を確認できます。この時の到達番号については、<ArriveID>タグより「9002020000002128」であることが分かります。
>curl -X GET -H "x-eGovAPI-AccessKey:
78zTKYZQrWdLYgC5cP4oTmalTQE8T7uPF+UDzUEYKZnM4o+teUfNgBGtQsEj6OLsLJX8bW72/B1C
me9RmoZLt/YjnLey59EVKzGKVmv/aHQ9ZCCh9zV6gP1h2B8A4/rQOdiXlS9bQ6YGoahaiJzoooW4
n7dF27OCt71+2yTgG6vMnTify8TYVX7ftazfNUfCPm/XPKTg+4PUnSlcXxPrN8dgRiuv6dSeTZFN
6juFvO+PsXIcxr//WtGvMP0V4cFP"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply;id=202007231845376104
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007231845376104</SendNumber>
<SendDateFrom></SendDateFrom>
<SendDateTo></SendDateTo>
<PackageApplyCount>1</PackageApplyCount>
<PackageApply>
<No>1</No>
<SendNumber>202007231845376104</SendNumber>
<SendDate>20200723184537</SendDate>
<WorkStatus></WorkStatus>
<NormalCount>1</NormalCount>
<AllCount>1</AllCount>
<SupplementaryMessage></SupplementaryMessage>
<ErrorCount>0</ErrorCount>
<ErrorFile></ErrorFile>
<ApplyCount>1</ApplyCount>
<Apply>
<No>1</No>
<ArriveID>9002020000002128</ArriveID>
<MinistryName>デグレ省</MinistryName>
<ProcName>
APIテスト用手続(労働保険関係手続)(通)0001/APIテスト用手続(労働保険関係手続)(通)0001
</ProcName>
<ProcFolderName>900A010200001000(1)</ProcFolderName>
<ApplicantName>ほげ ほげ</ApplicantName>
<CorporationtName></CorporationtName>
<DepartmentName></DepartmentName>
<Status>到達</Status>
<StatusDate>20200723184907</StatusDate>
<PayStatus>-</PayStatus>
<PayWaitCount>0</PayWaitCount>
<CorrectStatus>なし</CorrectStatus>
<CommentCountNotRead>0</CommentCountNotRead>
<CommentCount>0</CommentCount>
<DocCountNotDownload>0</DocCountNotDownload>
<DocCount>0</DocCount>
</Apply>
</PackageApply>
</ApplData>
</DataRoot>
#3 個別ファイル署名形式による一括申請
curlコマンドを使って、認証、一括申請、送信案件一覧情報取得、公文書・コメント一覧取得、公文書取得という順にe-Govにアクセスして、各レスポンスを確認します。さらにe-Govが発出する公文書の内容を確認します。
##3.1 署名付きxmlを生成する
>ruby make_zip_file_individual_signature_format.rb
ドライバーを実行すると、zip形式ファイルが作成されます。これをデータ変換ツールでBase64形式エンコードに変換して、apply_data.xmlに取り込んで、申請データを作成します。
kousei20200716142110000.xmlの署名情報タグは次のようになります。
<署名情報>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="20200907161432">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="#%E6%A7%8B%E6%88%90%E6%83%85%E5%A0%B1">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>fy/hXgyLyi66Vu8MmkmLVshFMOckyFz5FL4cXx88LFc=</DigestValue>
</Reference>
<Reference URI="950A10181002400001_01.xml">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>R657a0a/AIViJFr/JMi7hl350io/wOr4hSuNRmVfcsQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>
cccorxnQJsDjeLvf05LcpwX8E2VfowS0kDPXBi9KoSnC00C9VMEqXxJGDvABi5+rCm+TL49KGGVl
mTYSCBtbXIWScKf/ep1wNro33lWN99+Xtoqpbeb7pqja9XkFzcR9XTtRfJBtjVjPSlAg36s+0cUm
WAQmXNokYeiYcyLojuO18tiiywJxxV4605UjhSF67WVQ4HcEJlbqnb4VvlwJYsN8YDSJzCktBuHM
/bvM8HEi4DOGhJ+H7zmtJ6Gjzlm/SYyD5r8/kqNOMtTSx63X1B29dpC6hcKDuo+UQxsPFZbh06NU
vZYCDvIpzmNrrhwdj0dZaOliVfgaCtDUC3ed3g==
</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>
MIIEizCCA3OgAwIBAgIEWCsMRzANBgkqhkiG9w0BAQsFADAuMQswCQYDVQQGEwJKUDERMA8GA1UE
CgwIRGVtb01pbjExDDAKBgNVBAsMA0NBMTAeFw0xOTEwMjUwMTE2NTZaFw0yNDEwMjQxNDU5NTla
MEkxCzAJBgNVBAYTAkpQMREwDwYDVQQKDAhEZW1vTWluMTEMMAoGA1UECwwDQ0ExMRkwFwYDVQQD
DBBJY2hpcm8gTWFkb2d1Y2hpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsD81VFFm
GM26HYdeGrGzbPbadeBzU4WxIE1r6qeZLxjz7DiV42tjo8QFulWZk6hmCeb5j9ChKp+BA/9Yj6us
ccKHZrPQmbcXUZkXRXz9z/7CLxp8b1zAzJakZ0g7o9iU3a3TpyeP6V+GFtkO8YqfthEsJsYzx82d
Ui85Bm4l5pnztozPdXRZd2VJpdwzGqtqw6N9PKzMNWux5C0jklkaPeP5P6NHLfeN51+phkY2xkdJ
lry629PeKjZAwN0Z8Xu0JdubCvA95UctoZgBoOjpgDtWImV3o9hDpwu+1tMlEBhNZIuKOr2G38qR
Z9iJUyoK+XhbzyBUu0A2cwCj0MshbwIDAQABo4IBlDCCAZAwDgYDVR0PAQH/BAQDAgbAMBEGCWCG
SAGG+EIBAQQEAwIGQDBOBgNVHRIERzBFpEMwQTELMAkGA1UEBhMCSlAxHjAcBgNVBAoMFeaooeaT
rOawkemWk+iqjeiovOWxgDESMBAGA1UECwwJ77yj77yh77yRMB8GA1UdIAEB/wQVMBMwEQYPAoM4
ho4xCAEBAAKMmyVkMGgGA1UdEQRhMF+kXTBbMQswCQYDVQQGEwJKUDEeMBwGA1UECgwV5qih5pOs
5rCR6ZaT6KqN6Ki85bGAMRIwEAYDVQQLDAnvvKPvvKHvvJExGDAWBgNVBAMMD+eqk+WPo+OAgOS4
gOmDjjBQBgNVHR8ESTBHMEWgQ6BBpD8wPTELMAkGA1UEBhMCSlAxETAPBgNVBAoMCERlbW9NaW4x
MQwwCgYDVQQLDANDQTExDTALBgNVBAMMBENSTDEwHwYDVR0jBBgwFoAUFNPnlvRSx8XFOnRlLumW
95h4I18wHQYDVR0OBBYEFD6UH9Exye9dEpz9MHJ3sbUDpoZSMA0GCSqGSIb3DQEBCwUAA4IBAQBb
CKyFGsqMv6+HkrY0OK+4v40PJQAa/KbOC3JTKooLfNCNXTiTwtWAl1sGN+Ow8pIp8Yvj16VcYpi8
zO4TmNe8NT+u/e2OvBXwJ9OxOs9UNI2m/mXGcSSJ7eXMR3aVCniDU7IaQeicquQttLP9IOk9Ao1W
+BM35y5bITA/BMO5tzgaimp4G484QtF/XLi40rGhaZAHGEfvl0abJXPumjajhnGv7SCkjw4+9qdz
5Dtp6kl+GVshQgo6ofpEWhVzdhfqKhNy8dNRL7C/gOTYm+M9SAFk9syL5xKXRyMUGDOheypiJrW/
QyOjrxs6cFa5VqaZWcRIq8yVPwABCpGG/hjU
</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</署名情報>
kousei20200716142110001.xmlの署名情報タグについては省略します。
##3.2 一括申請を行う
curlコマンドで一括申請を行います。
>curl -X POST -d @apply_data.xml -H "x-eGovAPI-AccessKey:
RJc23F21t9vhjtaleH9N/Y9fhDJ9O8u0q+A5MHa50opasIe+cNVgM+8MJ9VVwR2gjiqIHH9Fr0oy
46lRRXZTaW6mbs4dWFvK6VUoj/tUwgd7XorYA7KtpGhQGVjc3E37Z6Di167pFycmB6+SjfalAgF6
eyQPWzvs9Kl7IgP68NqMbp0neFNCprL0qgUM1NxxuxlsJbkF1cbp4FJ3rt2VpPUEosfe1+Nmj8w9
sCvEQKSKBDTytDwpFCU6IzMuH3m3"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007252053026176</SendNumber>
<SendDate>20200725205302</SendDate>
<SendFileName>apply_data.zip</SendFileName>
<SendApplyCount>1</SendApplyCount>
<ErrorCount>0</ErrorCount>
</ApplData>
</DataRoot>
##3.3 送信案件一覧情報を取得する
curlコマンドで送信案件一覧情報を取得します。一括申請のレスポンスで取得した送信番号「202007252053026176」をリクエストURIのパラメタに設定する点に留意します。
>curl -X GET -H "x-eGovAPI-AccessKey:
NN1s3WgK2pcwv/5aELtNyRlcTjENG+pM4yAX3gU6NeSyCxACKwBXTUsdx4oxAmv75gXGsdvS6lFX
n2Ar5RNCUlwpjRhGbW8jZzoW5CCXQYOLLlNl21sffoKodYSMIr1GPMzJSeQTC+tT0gGFqAsyQxm6
Iethc/5AFJgdPX3bDAC9g2OvMDDNrECKY1/XaGCXDckIeI8H1SLz7mDi4Q1ZYofF5gDCFcSPsNSJ
A2fuEZoPRoHVBw/mzo7/qBFA1wWY"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply;id=202007252053026176
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007252053026176</SendNumber>
<SendDateFrom></SendDateFrom>
<SendDateTo></SendDateTo>
<PackageApplyCount>1</PackageApplyCount>
<PackageApply>
<No>1</No>
<SendNumber>202007252053026176</SendNumber>
<SendDate>20200725205302</SendDate>
<WorkStatus>処理待ち</WorkStatus>
<NormalCount>0</NormalCount>
<AllCount>1</AllCount>
<SupplementaryMessage></SupplementaryMessage>
<ErrorCount>0</ErrorCount>
<ErrorFile></ErrorFile>
<ApplyCount>0</ApplyCount>
</PackageApply>
</ApplData>
</DataRoot>
<WorkStatus>タグより、処理待ち状態です。しばらくして、もう一度、同じコマンドを実行すると、形式チェックが始まっている様子です。
>curl -X GET -H "x-eGovAPI-AccessKey:
NN1s3WgK2pcwv/5aELtNyRlcTjENG+pM4yAX3gU6NeSyCxACKwBXTUsdx4oxAmv75gXGsdvS6lFX
n2Ar5RNCUlwpjRhGbW8jZzoW5CCXQYOLLlNl21sffoKodYSMIr1GPMzJSeQTC+tT0gGFqAsyQxm6
Iethc/5AFJgdPX3bDAC9g2OvMDDNrECKY1/XaGCXDckIeI8H1SLz7mDi4Q1ZYofF5gDCFcSPsNSJ
A2fuEZoPRoHVBw/mzo7/qBFA1wWY"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply;id=202007252053026176
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007252053026176</SendNumber>
<SendDateFrom></SendDateFrom>
<SendDateTo></SendDateTo>
<PackageApplyCount>1</PackageApplyCount>
<PackageApply>
<No>1</No>
<SendNumber>202007252053026176</SendNumber>
<SendDate>20200725205302</SendDate>
<WorkStatus>処理待ち</WorkStatus>
<NormalCount>0</NormalCount>
<AllCount>1</AllCount>
<SupplementaryMessage></SupplementaryMessage>
<ErrorCount>0</ErrorCount>
<ErrorFile></ErrorFile>
<ApplyCount>0</ApplyCount>
</PackageApply>
</ApplData>
</DataRoot>
さらにしばらく待ち、もう一度、同じコマンドを実行すると、到達状態から審査終了に遷移しました。<ArriveID>タグには到達番号「9502020000056054」が設定されています。
>curl -X GET -H "x-eGovAPI-AccessKey:
NN1s3WgK2pcwv/5aELtNyRlcTjENG+pM4yAX3gU6NeSyCxACKwBXTUsdx4oxAmv75gXGsdvS6lFX
n2Ar5RNCUlwpjRhGbW8jZzoW5CCXQYOLLlNl21sffoKodYSMIr1GPMzJSeQTC+tT0gGFqAsyQxm6
Iethc/5AFJgdPX3bDAC9g2OvMDDNrECKY1/XaGCXDckIeI8H1SLz7mDi4Q1ZYofF5gDCFcSPsNSJ
A2fuEZoPRoHVBw/mzo7/qBFA1wWY"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/apply;id=202007252053026176
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<SendNumber>202007252053026176</SendNumber>
<SendDateFrom></SendDateFrom>
<SendDateTo></SendDateTo>
<PackageApplyCount>1</PackageApplyCount>
<PackageApply>
<No>1</No>
<SendNumber>202007252053026176</SendNumber>
<SendDate>20200725205302</SendDate>
<WorkStatus></WorkStatus>
<NormalCount>1</NormalCount>
<AllCount>1</AllCount>
<SupplementaryMessage></SupplementaryMessage>
<ErrorCount>0</ErrorCount>
<ErrorFile></ErrorFile>
<ApplyCount>1</ApplyCount>
<Apply>
<No>1</No>
<ArriveID>9502020000056054</ArriveID>
<MinistryName>APIステータス省</MinistryName>
<ProcName>
APIテスト用手続(社会保険関係手続)(個)1006/APIテスト用手続(社会保険関係手続)(個)1006
</ProcName>
<ProcFolderName>950A102200039000(1)</ProcFolderName>
<ApplicantName>松井 英夫</ApplicantName>
<CorporationtName></CorporationtName>
<DepartmentName></DepartmentName>
<Status>審査終了</Status>
<StatusDate>20200725210114</StatusDate>
<PayStatus>-</PayStatus>
<PayWaitCount>0</PayWaitCount>
<CorrectStatus>なし</CorrectStatus>
<CommentCountNotRead>0</CommentCountNotRead>
<CommentCount>0</CommentCount>
<DocCountNotDownload>1</DocCountNotDownload>
<DocCount>1</DocCount>
</Apply>
</PackageApply>
</ApplData>
</DataRoot>
##3.4 公文書・コメント一覧を取得する
curlコマンドで公文書・コメント一覧を取得します。送信案件一覧情報取得のレスポンスで取得した到達番号「9502020000056054」をリクエストURIに設定する点に留意します。
>curl -X GET -H "x-eGovAPI-AccessKey:
NN1s3WgK2pcwv/5aELtNyRlcTjENG+pM4yAX3gU6NeSyCxACKwBXTUsdx4oxAmv75gXGsdvS6lFX
n2Ar5RNCUlwpjRhGbW8jZzoW5CCXQYOLLlNl21sffoKodYSMIr1GPMzJSeQTC+tT0gGFqAsyQxm6
Iethc/5AFJgdPX3bDAC9g2OvMDDNrECKY1/XaGCXDckIeI8H1SLz7mDi4Q1ZYofF5gDCFcSPsNSJ
A2fuEZoPRoHVBw/mzo7/qBFA1wWY"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/notice/9502020000056054
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<ArriveID>9502020000056054</ArriveID>
<ProcName>APIテスト用手続(社会保険関係手続)(個)1006/APIテスト用手続(社会保険関係手続)(個)1006</ProcName>
<Official>
<NoticeSubID>1</NoticeSubID>
<AllowedDate>20200725210114</AllowedDate>
<DocTitle>署名つき公文書</DocTitle>
<File>
<FileName>official_doc1.xml</FileName>
</File>
<DownloadExpiredDate>20201122000000</DownloadExpiredDate>
<DownloadDate></DownloadDate>
<Sign>あり</Sign>
<ExpiredDateFlag>0</ExpiredDateFlag>
</Official>
</ApplData>
</DataRoot>
<DocTitle>タグより、サブID「1」の署名付き公文書が発出されています。また、<DownloadExpiredDate>タグより、取得期限が2020年11月20日までです。
##3.5 公文書を取得する
curlコマンドで公文書を取得します。ここでも送信案件一覧情報取得のレスポンスで取得した到達番号「9502020000056054」及びサブID「1」をリクエストURIに設定する点に留意します。
>curl -X GET -H "x-eGovAPI-AccessKey:
NN1s3WgK2pcwv/5aELtNyRlcTjENG+pM4yAX3gU6NeSyCxACKwBXTUsdx4oxAmv75gXGsdvS6lFX
n2Ar5RNCUlwpjRhGbW8jZzoW5CCXQYOLLlNl21sffoKodYSMIr1GPMzJSeQTC+tT0gGFqAsyQxm6
Iethc/5AFJgdPX3bDAC9g2OvMDDNrECKY1/XaGCXDckIeI8H1SLz7mDi4Q1ZYofF5gDCFcSPsNSJ
A2fuEZoPRoHVBw/mzo7/qBFA1wWY"
-H "x-eGovAPI-SoftwareID: ************"
-H "Authorization: Basic ****************************"
https://*******************/*******/*/******/officialdocument/9502020000056054/1
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Result>
<Code>0</Code>
<Message></Message>
</Result>
<ApplData>
<ArriveID>9502020000056054</ArriveID>
<NoticeSubID>1</NoticeSubID>
<Download>
<FileData>
UEsDBBQACAAIAGCp+VAAAAAAAAAAAAAAAAARAAAAb2ZmaWNpYWxfZG9jMS54bWytV1uv4tYVfkfi
PxyRRzRjLoZjVxyi7SsGfMVcXyoDxgYDNrbBhqeBk2tn1KRJpukkVSfTROk0aSeJ0ksSpZ0f45xz
Jk/5C93AnAk5M4naKkiW9lp77W9967L3EoXnw8n4aKG73tCeniTS11OJI33as/vDqXGSqKvMNSxx
5PnatK+N7al+kpjaieeLhe2pa56/HOueqev+kb904J6vhz4SeuPEkenqg5OEPRgMe0Nt/Mu+3Utf
3248X4zHCpRIHjVopcaJwt4jVB7BX4FRREF9LOwUNZpUaLJdfPThR2ef3S4gl/KhiQp4CRqs4e5u
ebDHCywnMOKR2pbok0QK/q6l06l0orhdFpDH25fekUP3BUKk2kccdZKAbLfrxA+dtqt0rUTT6lFd
4Z4VKHJoDiEEsQgk7loqlS4ge/FwH6j0Y5KQXDqHpDNIZmsI9Yd26uGpnQYwTPHiozfPXnu/gGzX
V7YFwNPFb7648e3prwvITrhiUBIFUeEYsnj+4GEBeSId+ER+4LQA6mpJVJ5J45+vnd28c/H79Y8z
(省略)
DsArHMBXOICvcABf4QC+wgF8hQP4CgfwFQ7gKxzAVziAr3CAXuEAvcIBeoUD9AoH6BUO0CscoFc4
QK9wgF7hAL3CAX6FA/wKB/gVDvArHOBXOMCvcIBf4QC/wgF+hQP8Cgf7Kxzsr3Cwv8LB/goH+ysc
7K9wsL/Cwf4KB/M/8mMDv+zzv0r+/bwHAIH//Y4CcHBwsP+XB3zZHv/9zgO+LKv/iHN2NLCwNnH8
87jz1yGH7f/1yeavs4uBo/Nf73Igy8vmREKgoBCRE/2f9zvz/5fUmOQdTVyJ/8zoz3OfkrMN8Z8D
9t85s71siL9z/j9QSwcIOMaRTY3BAAAA0AAAUEsBAhQAFAAIAAgAYKn5UEytAV1HCgAAGBEAABEA
AAAAAAAAAAAAAAAAAAAAAG9mZmljaWFsX2RvYzEueG1sUEsBAhQAFAAIAAgAYKn5UIAs/hjbAgAA
hA4AABEAAAAAAAAAAAAAAAAAhgoAAG9mZmljaWFsX2RvYzEueHNsUEsBAhQAFAAIAAgAYKn5UDjG
kU2NwQAAANAAABEAAAAAAAAAAAAAAAAAoA0AAG9mZmljaWFsX2RvYzEucGRmUEsFBgAAAAADAAMA
vQAAAGzPAAAAAA==
</FileData>
</Download>
</ApplData>
</DataRoot>
<FileData>タグで囲まれた部分が、Base64形式でエンコードされた公文書データです。これをデータ変換ツールを使ってデコードした上でバイナリファイルに出力します。出力されたファイルの拡張子をzipに変更して解凍すると、次の公文書が得られます。
- official_doc1.pdf
- official_doc1.xml
- official_doc1.xsl
official_doc1.pdfは次の内容です。
#4 まとめ
今回の試行を通して見えてきたe-Govの問題点を定義した上で、マイナポータルAPIで改善できるか考察します。
マイナポータルとは、政府が運営するオンラインサービスです。子育てや法人設立等に関する行政手続をワンストップで行えたり、行政機関からのお知らせの確認等が行えます。マイナポータルでは、申請API等が用意される予定であり、今後も、順次、機能拡充が行われます。
現状は、e-Govの他、e-Tax(国税関係)、eLTAX(地方税関係)がそれぞれ存在し、利用者は目的別に応じて、それぞれのポータルサイトで公開されているAPIを利用して申請を行います。
今後は、マイナポータルで公開されているAPIに統合されることが見込まれます。
マイナポータルAPIの仕様書については、ソフトウェア開発業者向け専用ページに入手方法が記載されています。
##4.1 e-Govの問題点を定義する
###(1)申請書XMLの管理が煩雑である
申請書XMLについては、雇用保険関係手続26種類、社会保険関係手続42種類、労働保険適用徴収関係手続39種類と合計101種類のXMLファイルを管理する必要があります。今後、行政手続きのデジタル化が進むにつれ、手続の統廃合及び提出データの削減が行われる事が見込まれるため、それに対応するためにソフトウェアサービスの保守工数が大きいと考えられます。
###(2)HTTPレスポンスがXML形式であるため扱いにくい
HTTPレスポンスについては、一般的にはJson形式が多いです。一方、e-GovはXML形式です。XML形式だとテキストしか扱えず、integerやboolean、nullといった基本的な型すら存在しません。バイナリデータを含めるためには、Base64形式でエンコードする必要があるため、ソフトウェアサービス側で変換コードを記述する必要があり、扱いにくいです。
###(3)公文書及びコメント通知の機械読みを想定していない
各府省が発出する公文書及びコメント通知については、機械読みを想定しておらず、形式も公開されていません。ファイルもxml+xsl、PDFとバラバラです。公文書及びメッセージを固めたZipファイルをBase64形式でエンコードした結果を返す方式であり、各府省が付与する情報をHTTPレスポンスから直接取り出すことができません。
各府省が発出する情報としては、次の情報があります。これらは一例であり、実際は沢山の情報があります。
- 雇用保険に新規適用される事で付与される雇用保険適用事業所番号
- 雇用保険の新規加入者に付与される雇用保険被保険者番号
- 社会保険料に関する改定後の標準報酬月額
- 申請に対する返戻理由等
- e-Taxアカウント情報(利用者識別番号及び暗証番号)
現状は、これらの情報をソフトウェアサービスに反映させるため、ファイル展開をした後、人手で公文書及びコメント通知を確認して入力する必要があり、無駄な手間や入力ミス等が生じます。
公文書及びコメント通知については、公的機関が発出した書類であり、改ざんが出来ないようにする事及び改善されても後から分かる事を目的としているため、このような仕様になっていると考えます。
##4.2 マイナポータルAPIで問題点が改善するか
マイナポータルAPIでは、複数の申請書XMLが統一入力フォームという1つのXMLに統合されている点、HTTPレスポンスがJson形式になっている点から、e-Govの1つ目及び2つ目の問題点については、改善されます。一方、3つ目の問題点については、e-Govと同様にHTTPレスポンス内に公文書等のファイルをBase64エンコード形式で返す方式になっています。HTTPレスポンスから各府省が発出する情報を直接取得する事ができません。
マイナポータルAPIには、e-Govに存在しない機能として「自己情報所得API」が用意されています。「自己情報取得API」は、ユーザが行政所有の自己情報を確認するだけにとどまらず、Webサービス事業者に自己情報を提供することまで可能にします。
例えば、金融機関でローンを組む際、金融機関から所得証明書(課税証明書)の提出が求められるとします。現状は、ユーザが行政窓口に赴き、所得証明書(課税証明書)を発行してもらい、金融機関に提出します。一方、自己情報取得APIによるシステム間連携が実現すれば、金融機関がマイナポータルから所得情報を提供してもらう事が可能です。ユーザが行政窓口に赴く必要はなく、利便性が向上します。
この自己情報所得APIを使えば、行政が持つ自己の雇用保険被保険者番号や標準報酬月額等の情報を取得できます。今後、社労士等の代理人の操作により行政側の情報を取得する事が可能になれば改善が見込めます。