Skip to content

Instantly share code, notes, and snippets.

@balvinder294
Created July 27, 2020 07:05
Show Gist options
  • Save balvinder294/c5939b5732ab79d09ba53ef23e978e5a to your computer and use it in GitHub Desktop.
Save balvinder294/c5939b5732ab79d09ba53ef23e978e5a to your computer and use it in GitHub Desktop.
JWT Token gneration for apple Sign in verification
/***Imports ****/
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import java.security.PrivateKey;
import java.security.PublicKey;
import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.io.File;
import org.springframework.util.ResourceUtils;
/**************/
/***
* To generate JWT token for verification
* @param identifierFromApp the service identifier of web app or kid from mobile app extracted from id token
*
****/
private String generateJWT(String identiferFromApp) throws Exception {
// Generate a private key for token verification from your end with your creds
PrivateKey pKey = generatePrivateKey();
String token = Jwts.builder()
.setHeaderParam(JwsHeader.KEY_ID, appleKeyId)
.setIssuer(appleTeamId)
.setAudience("https://appleid.apple.com")
.setSubject(identiferFromApp)
.setExpiration(new Date(System.currentTimeMillis() + (1000 * 60 * 5)))
.setIssuedAt(new Date(System.currentTimeMillis()))
.signWith(pKey, SignatureAlgorithm.ES256)
.compact();
return token;
}
// Method to generate private key from certificate you created
private PrivateKey generatePrivateKey() throws Exception {
// here i have added cert at resource/apple folder. So if you have added somewhere else, just replace it with your path ofcert
File file = ResourceUtils.getFile("classpath:apple/cert.p8");
final PEMParser pemParser = new PEMParser(new FileReader(file));
final JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
final PrivateKeyInfo object = (PrivateKeyInfo) pemParser.readObject();
final PrivateKey pKey = converter.getPrivateKey(object);
pemParser.close();
return pKey;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment