|
16 | 16 | import com.google.api.client.json.Json;
|
17 | 17 | import java.io.IOException;
|
18 | 18 | import java.io.OutputStream;
|
| 19 | +import com.auth0.jwk.Jwk; |
| 20 | +import com.auth0.jwk.JwkException; |
| 21 | +import com.auth0.jwk.JwkProvider; |
| 22 | +import com.auth0.jwk.UrlJwkProvider; |
| 23 | +import com.auth0.jwt.JWT; |
| 24 | +import com.auth0.jwt.JWTVerifier; |
| 25 | +import com.auth0.jwt.algorithms.Algorithm; |
| 26 | +import com.auth0.jwt.interfaces.DecodedJWT; |
| 27 | +import java.net.MalformedURLException; |
| 28 | +import java.net.URL; |
| 29 | +import java.security.interfaces.RSAPublicKey; |
19 | 30 |
|
20 | 31 |
|
21 | 32 | public class ApiClient {
|
@@ -115,9 +126,24 @@ public void writeTo(OutputStream out) throws IOException {
|
115 | 126 | }
|
116 | 127 |
|
117 | 128 | // Builder pattern to get API instances for this client.
|
118 |
| - |
119 | 129 | public AccountingApi accountingApi() {
|
120 | 130 | return new AccountingApi(this);
|
121 | 131 | }
|
| 132 | + |
| 133 | + public DecodedJWT verify(String accessToken) throws MalformedURLException, JwkException { |
| 134 | + |
| 135 | + DecodedJWT unverifiedJWT = JWT.decode(accessToken); |
| 136 | + JwkProvider provider = new UrlJwkProvider(new URL("https://identity.xero.com/.well-known/openid-configuration/jwks")); |
| 137 | + Jwk jwk = provider.get(unverifiedJWT.getKeyId()); |
| 138 | + |
| 139 | + Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(),null); |
| 140 | + |
| 141 | + JWTVerifier verifier = JWT.require(algorithm) |
| 142 | + .withIssuer("https://identity.xero.com") |
| 143 | + .build(); |
| 144 | + DecodedJWT verifiedJWT = verifier.verify(accessToken); |
| 145 | + |
| 146 | + return verifiedJWT; |
| 147 | + } |
122 | 148 |
|
123 | 149 | }
|
0 commit comments