IRS 电子服务帐户的 JSON 网络密钥 (JWK)

Posted

技术标签:

【中文标题】IRS 电子服务帐户的 JSON 网络密钥 (JWK)【英文标题】:JSON Web Key (JWK) for IRS E-services account 【发布时间】:2022-01-01 13:35:03 【问题描述】:

我的客户需要一个 JSON Web 密钥才能访问 IRS 电子服务系统。

JWK 中需要以下字段:kidktyusenex5tx5ckty 字段应等于“RSA”。

我想做自签名。我尝试过的所有操作都出现错误异常。

【问题讨论】:

【参考方案1】:

我在同一条船上,但我现在开始工作了。

转到https://mkjwk.org/ 使用

创建一个 RSA 密钥

尺寸:2048,

密钥用途:签名

算法:RS256:RSA

密钥 ID:指定:20190607

显示 X.509:是

点击生成。

获取“公钥和私钥对集”json 删除除 kty、kid、use、n、e 以外的所有内容

获取“自签名证书”的内容

删除-----BEGIN CERTIFICATE-----

删除-----END CERTIFICATE-----

删除所有空格

将其添加到 json 为 x5c:["cert_code_here"]

将 sha1("cert_code_here") 作为 x5t 添加到 json 中(注意这不是 base 64 编码,就像其他 JWK 消费者应该采用的那样)

应该以这样的方式结束


    "keys": [
        
            "kty": "RSA",
            "kid": "20190607",
            "use": "sig",
            "n": "z2f8T5IoWF9g5PjitDKswQy6o4ohIWspl_dO6iRNBl4MHxBetqBdkRDGJJjcLHzbPj5pOh_-WMo3r3P8kuTrc0dZLzqWhgCx7TCyvQKTDJuwV_lgrGAlO47OrnZgkhJpgRmZTXxfszmtRjKhkGJh4hPU7v-EamVABt7MuAWPkkuEl2hoZKY8z_NwMQgMj6hDcvTNYDp7v3KLwoZO9w_VzWp02RnEkeX7P3yVnXlHntenQsaEDFW20GjU4bsCqAlkA-QRQA9ZrUKABspG6yVvWoulimqdCoqb0msEPeOm9qfseFRK9cqh3_TxTbb63zOiwYD0Hjp3meaC9GqLEjpAVw",
            "e": "AQAB",
            "x5c": [
                "MIICpDCCAYygAwIBAgIGAX3oe21MMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMMCDIwMTkwNjA3MB4XDTIxMTIyMzE4MDkwMloXDTIyMTAxOTE4MDkwMlowEzERMA8GA1UEAwwIMjAxOTA2MDcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPZ\/xPkihYX2Dk+OK0MqzBDLqjiiEhaymX907qJE0GXgwfEF62oF2REMYkmNwsfNs+Pmk6H\/5Yyjevc\/yS5OtzR1kvOpaGALhtmlK9ApMMm7BX+WCsYCU7js6udmCSEmmBGZlNfF+zOa1GMqGQYmHiE9Tu\/4RqZUAG3sy4BY+SS4SXaGhkpjzP83AxCAyPqENy9M1gOnu\/covChk73D9XNanTZGcSR5fs\/fJWdeUee16dCxoQMVbbQaNThuwKoCWQD5BFAD1mtQoAGykbrJW9ai6WKap0KipvSawQ946b2p+x4VEr1yqHf9PFNtvrfM6LBgPQeOneZ5oL0aosSOkBXAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGJ6NAfjvRxg58KOKzMWZGEWi0F16EsnYhKyCQ3ntzQc5iiviUxigwT0C3TJQDtk6CJJKNEpK2cw4KuB2pQfMEWrxAKssNMwNZ0XOO+mvlEYQU8tKfWOQ7YYw1xlgc5lGVKS1cHeC7caXFr0eGaklLENp59k34pnQXyD\/IZBUjjaxcJlvmJ35\/Y+JoeSYx\/AJAcxEYqUEetqkcLyrZjd+dkQjH8Zk9LEOrrPTLdNe\/IlrGkJXmquRe0smBtsAkHiSe0RNgUOf\/jQbgliSfd80cV50r+dgJuv1FcrCEH+RzbVYWp7aV\/ilxWEJ2F3Ma8MHR3Zw4DQraZKixHji9uZGYk="
            ],
            "x5t": "e692b7ac2080e0ec363aa83aa8f6e2c7e164b985"
        
    ]

或者使用我写的这个 php

<?php
    if ( isset( $_POST[ 'ppk' ] ) ) 
        $ppk = $_POST[ 'ppk' ];
     else 
        $ppk = '';
    
    if ( isset( $_POST[ 'ssc' ] ) ) 
        $ssc = $_POST[ 'ssc' ];
     else 
        $ssc = '';
    
    echo "<form method='post'>";
    echo "Public and Private Keypair<br>";
    echo "<textarea cols=90 rows=10 id='ppk' name='ppk'>" . $ppk . '</textarea>';
    echo "<hr>";
    echo "Self-Signed Certificate<br>";
    echo "<textarea cols=90 rows=10 id='ssc' name='ssc'>" . $ssc . '</textarea>';
    echo "<br><button type='submit' />Go</button>";
    echo "</form>";
    if ( isset( $_POST[ 'ppk' ] ) && isset( $_POST[ 'ssc' ] ) ) 
        $ja                      = json_decode( $ppk, true );
        $ssc                     = str_replace( "-----BEGIN CERTIFICATE-----", '', $ssc );
        $ssc                     = str_replace( "-----END CERTIFICATE-----", '', $ssc );
        $ssc                     = str_replace( "\n", '', $ssc );
        $ssc                     = str_replace( "\r", '', $ssc );
        $ssc                     = trim( $ssc );
        $jaoo                    = array( );
        $jaoo[ 'keys' ]          = array( );
        $jaoo[ 'keys' ][ 'kty' ] = $ja[ 'kty' ];
        $jaoo[ 'keys' ][ 'kid' ] = $ja[ 'kid' ];
        $jaoo[ 'keys' ][ 'use' ] = $ja[ 'use' ];
        $jaoo[ 'keys' ][ 'n' ]   = $ja[ 'n' ];
        $jaoo[ 'keys' ][ 'e' ]   = $ja[ 'e' ];
        $jaoo[ 'keys' ][ 'x5c' ] = array(
             $ssc 
        );
        $jaoo[ 'keys' ][ 'x5t' ] = sha1( $ssc );
        $jaoo[ 'keys' ]          = array(
             $jaoo[ 'keys' ] 
        );
        $rawo                    = json_encode( $jaoo, JSON_PRETTY_PRINT );
        echo "<textarea cols=250 rows=20>";
        echo print_r( $rawo, true );
        echo "</textarea>";
    

【讨论】:

以上是关于IRS 电子服务帐户的 JSON 网络密钥 (JWK)的主要内容,如果未能解决你的问题,请参考以下文章

使用 GAE 服务帐户 JSON 密钥

如何使用服务帐户密钥通过 ADF 连接到 Google 云存储

与服务帐户电子邮件共享 Google 表格

使用 Json 文件进行 Google 服务帐户身份验证

如何使用服务帐户 JSON 创建 GoogleCredential

使用 Google Cloud 服务帐户是 VSTS 构建