2015-11-25 29 views
1

我試圖創建一個嵌套的JSON以下提供在這裏 http://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encrypted-jwt嵌套JSON JWT靈氣何塞-jwt庫

import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 

import com.nimbusds.jose.*; 
import com.nimbusds.jose.crypto.*; 
import com.nimbusds.jwt.*; 


    // Generate 256-bit AES key for HMAC as well as encryption 
    KeyGenerator keyGen = KeyGenerator.getInstance("AES"); 
    keyGen.init(256); 
    SecretKey secretKey = keyGen.generateKey(); 

    // Create HMAC signer 
    JWSSigner signer = new MACSigner(secretKey.getEncoded()); 

    // Prepare JWT with claims set 
    JWTClaimsSet claimsSet = new JWTClaimsSet(); 
    claimsSet.setSubject("alice"); 
    claimsSet.setIssueTime(new Date()); 
    claimsSet.setIssuer("https://c2id.com"); 

    SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claimsSet); 

    // Apply the HMAC 
    signedJWT.sign(signer); 

    // Create JWE object with signed JWT as payload 
    JWEObject jweObject = new JWEObject(
     new JWEHeader.Builder(JWEAlgorithm.DIR, EncryptionMethod.A256GCM) 
      .contentType("JWT") // required to signal nested JWT 
      .build(), 
     new Payload(signedJWT)); 

    // Perform encryption 
    jweObject.encrypt(new DirectEncrypter(secretKey.getEncoded())); 

    // Serialise to JWE compact form 
    String jweString = jweObject.serialize(); 

我將得到的具有jweString不來正確問題的例子JWT

eyJhbGc. 
.6Ne 
.tw8z 

我收到4份,而不是3個部分,並具有一個空白部分

eyJhbGc. 
      .6Ne 

回答

3

JWE的一般格式有五個部分,<Header>.<EncryptedKey>.<InitializationVector>.<Ciphertext>.<AuthenticationTag>。在某些情況下,如使用示例中的直接加密,沒有加密密鑰,該部分留空。所以你應該得到一個JWE五部分,其中一部分是空的,看起來像這樣,eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..PVEd_V4E8qyppt6u.UOLp2qTNMw3iA9tyTEDHeJAdTczzI5uP4BkXHQSC6U73kywATBbvdWqz9nilsSWr1y-E1duTMvRL7hzDyyWPMZnpfnCWsjhzZtTnd22HODMWUpU.CoQq987RvHGIN5D6HhrjiQ

+0

謝謝..對不起,錯過了那部分 – amer