syruppay/jose

SyrupPay 商户的Jose PHP库

v1.1.2 2017-01-24 01:16 UTC

README

PHP 实现的 JOSE (Javascript Object Signing and Encryption),遵循 RFC 7516 和 RFC 7515 规范。JOSE 规范用于 SyrupPay 支付数据加密和解密以及 AccessToken 发布等,该库是为 SyrupPay 服务的商户分发而实现的。

支持的PHP版本

=> PHP 5.2.0

安装

composer (packagist)

"syruppay/jose": "v1.1.2"

用法

###JWE

<?php
//COMPOSER의 autoload
$baseDir = "";
require_once($baseDir . '/vendor/autoload.php');

//암호화 데이터
$payload = '{"iss":"syruppap_sample", "exp":1300819380, "isSample":true}';
//SyrupPay 발급 iss
$iss = 'sample';                                    
//SyrupPay 발급 암복호화 키 (AES256 KeyWrap 기준)
$key = '12345678901234561234567890123456';          

/*
 * JWE header 규격
 * JoseHeaderSpec::ALG : key wrap encryption algorithm. 아래 Supported JOSE encryption algorithms 참조
 * JoseHeaderSpec::ENC : content encryption algorithm. 아래 Supported JOSE encryption algorithms 참조
 */
$jose = new syruppay_jose_Jose();
$jweToken = $jose->configuration(
    syruppay_jose_JoseBuilders::JsonEncryptionCompactSerializationBuilder()
        ->header(new syruppay_jose_JoseHeader(
            array(JOSE_HEADER_ALG => JWA_A256KW,
                JOSE_HEADER_ENG => JWA_A128CBC_HS256,
                JOSE_HEADER_KID => $iss)))
        ->payload($payload)
        ->key($key)
)->serialization();

var_dump($jweToken);

$jose = new syruppay_jose_Jose();
$payload = $jose->configuration(
    syruppay_jose_JoseBuilders::compactDeserializationBuilder()
        ->serializedSource($jweToken)
        ->key($key)
)->deserialization();

var_dump($payload);

###JWS

<?php
//COMPOSER의 autoload
$baseDir = "";
require_once($baseDir . '/vendor/autoload.php');

//Sign 데이터
$payload = '{"iss":"syruppap_sample", "exp":1300819380, "isSample":true}';
//SyrupPay 발급 iss
$iss = 'sample';                                    
//SyrupPay 발급 sing 키 (HmacSha256 기준)
$key = '12345678901234561234567890123456';    

/*
 * JWS header 규격
 * JoseHeaderSpec::ALG : signature algorithm. 아래 Supported JOSE encryption algorithms 참조
 */
$jose = new syruppay_jose_Jose();
$jwsToken = $jose->configuration(
    syruppay_jose_JoseBuilders::JsonSignatureCompactSerializationBuilder()
        ->header(new syruppay_jose_JoseHeader(
            array(JOSE_HEADER_ALG => JWA_HS256,
                JOSE_HEADER_TYP => 'JWT',
                JOSE_HEADER_KID => $iss)))
        ->payload($payload)
        ->key($key)
)->serialization();

var_dump($jwsToken);

$jose = new syruppay_jose_Jose();
$claims = $jose->configuration(
    syruppay_jose_JoseBuilders::compactDeserializationBuilder()
        ->serializedSource($jweToken)
        ->key($key)
)->deserialization();

var_dump($claims);

支持的 JOSE 加密算法

JWE

JWE 使用以下 alg 和 enc 中指定的算法加密输入的 payload。alg 使用已发布的(或共享的)key 对内部随机生成的 CEK(内容加密密钥)进行加密,enc 使用内部生成的 CEK 对 payload 进行加密,并生成 header、CEK、iv、payload 的完整性数据。

JWE 的 "alg"(算法)头参数值

JWE 的 "enc"(加密算法)头参数值

JWS

JWS 使用 alg 中指定的算法保证输入 payload 的完整性。alg 使用已发布的 key 生成完整性数据。

JWS 的 "alg"(算法)头参数值

许可证

该库在 MIT 许可证的条款下作为开源软件提供。MIT License.