1616import java .io .File ;
1717import java .io .FileNotFoundException ;
1818import java .io .FileReader ;
19+ import java .net .MalformedURLException ;
1920import java .security .PrivateKey ;
2021import java .util .ArrayList ;
2122import java .util .Date ;
@@ -29,6 +30,7 @@ public class SignedDataTokens {
2930 private final String ctx ;
3031 private final ArrayList <String > dataTokens ;
3132 private final Integer timeToLive ;
33+ private final String tokenUri ;
3234
3335 private SignedDataTokens (SignedDataTokensBuilder builder ) {
3436 this .credentialsFile = builder .credentialsFile ;
@@ -37,14 +39,15 @@ private SignedDataTokens(SignedDataTokensBuilder builder) {
3739 this .ctx = builder .ctx ;
3840 this .dataTokens = builder .dataTokens ;
3941 this .timeToLive = builder .timeToLive ;
42+ this .tokenUri = builder .tokenUri ;
4043 }
4144
4245 public static SignedDataTokensBuilder builder () {
4346 return new SignedDataTokensBuilder ();
4447 }
4548
4649 private static List <SignedDataTokenResponse > generateSignedTokenFromCredentialsFile (
47- File credentialsFile , ArrayList <String > dataTokens , Integer timeToLive , String context
50+ File credentialsFile , ArrayList <String > dataTokens , Integer timeToLive , String context , String overrideTokenUri
4851 ) throws SkyflowException {
4952 LogUtil .printInfoLog (InfoLogs .GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_FILE_TRIGGERED .getLog ());
5053 List <SignedDataTokenResponse > responseToken ;
@@ -55,7 +58,7 @@ private static List<SignedDataTokenResponse> generateSignedTokenFromCredentialsF
5558 }
5659 FileReader reader = new FileReader (String .valueOf (credentialsFile ));
5760 JsonObject serviceAccountCredentials = JsonParser .parseReader (reader ).getAsJsonObject ();
58- responseToken = generateSignedTokensFromCredentials (serviceAccountCredentials , dataTokens , timeToLive , context );
61+ responseToken = generateSignedTokensFromCredentials (serviceAccountCredentials , dataTokens , timeToLive , context , overrideTokenUri );
5962 } catch (JsonSyntaxException e ) {
6063 LogUtil .printErrorLog (ErrorLogs .INVALID_CREDENTIALS_FILE_FORMAT .getLog ());
6164 throw new SkyflowException (ErrorCode .INVALID_INPUT .getCode (), Utils .parameterizedString (
@@ -69,7 +72,7 @@ private static List<SignedDataTokenResponse> generateSignedTokenFromCredentialsF
6972 }
7073
7174 private static List <SignedDataTokenResponse > generateSignedTokensFromCredentialsString (
72- String credentials , ArrayList <String > dataTokens , Integer timeToLive , String context
75+ String credentials , ArrayList <String > dataTokens , Integer timeToLive , String context , String overrideTokenUri
7376 ) throws SkyflowException {
7477 LogUtil .printInfoLog (InfoLogs .GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_STRING_TRIGGERED .getLog ());
7578 List <SignedDataTokenResponse > responseToken ;
@@ -79,7 +82,7 @@ private static List<SignedDataTokenResponse> generateSignedTokensFromCredentials
7982 throw new SkyflowException (ErrorCode .INVALID_INPUT .getCode (), ErrorMessage .InvalidCredentials .getMessage ());
8083 }
8184 JsonObject serviceAccountCredentials = JsonParser .parseString (credentials ).getAsJsonObject ();
82- responseToken = generateSignedTokensFromCredentials (serviceAccountCredentials , dataTokens , timeToLive , context );
85+ responseToken = generateSignedTokensFromCredentials (serviceAccountCredentials , dataTokens , timeToLive , context , overrideTokenUri );
8386 } catch (JsonSyntaxException e ) {
8487 LogUtil .printErrorLog (ErrorLogs .INVALID_CREDENTIALS_STRING_FORMAT .getLog ());
8588 throw new SkyflowException (ErrorCode .INVALID_INPUT .getCode (),
@@ -89,7 +92,7 @@ private static List<SignedDataTokenResponse> generateSignedTokensFromCredentials
8992 }
9093
9194 private static List <SignedDataTokenResponse > generateSignedTokensFromCredentials (
92- JsonObject credentials , ArrayList <String > dataTokens , Integer timeToLive , String context
95+ JsonObject credentials , ArrayList <String > dataTokens , Integer timeToLive , String context , String overrideTokenUri
9396 ) throws SkyflowException {
9497 List <SignedDataTokenResponse > signedDataTokens = null ;
9598 try {
@@ -112,7 +115,7 @@ private static List<SignedDataTokenResponse> generateSignedTokensFromCredentials
112115 }
113116 PrivateKey pvtKey = Utils .getPrivateKeyFromPem (privateKey .getAsString ());
114117 signedDataTokens = getSignedToken (
115- clientID .getAsString (), keyID .getAsString (), pvtKey , dataTokens , timeToLive , context );
118+ clientID .getAsString (), keyID .getAsString (), pvtKey , dataTokens , timeToLive , context , overrideTokenUri );
116119 } catch (RuntimeException e ) {
117120 LogUtil .printErrorLog (ErrorLogs .SIGNED_DATA_TOKENS_REJECTED .getLog ());
118121 throw new SkyflowException (e );
@@ -122,7 +125,7 @@ private static List<SignedDataTokenResponse> generateSignedTokensFromCredentials
122125
123126 private static List <SignedDataTokenResponse > getSignedToken (
124127 String clientID , String keyID , PrivateKey pvtKey ,
125- ArrayList <String > dataTokens , Integer timeToLive , String context
128+ ArrayList <String > dataTokens , Integer timeToLive , String context , String overrideTokenUri
126129 ) {
127130 final Date createdDate = new Date ();
128131 final Date expirationDate ;
@@ -133,6 +136,11 @@ private static List<SignedDataTokenResponse> getSignedToken(
133136 expirationDate = new Date (createdDate .getTime () + 60000 ); // Valid for 60 seconds
134137 }
135138
139+ String finalTokenUri = null ;
140+ if (overrideTokenUri != null && !overrideTokenUri .isEmpty ()) {
141+ finalTokenUri = overrideTokenUri ;
142+ }
143+
136144 List <SignedDataTokenResponse > list = new ArrayList <>();
137145 for (String dataToken : dataTokens ) {
138146 String eachSignedDataToken = Jwts .builder ()
@@ -142,6 +150,7 @@ private static List<SignedDataTokenResponse> getSignedToken(
142150 .claim ("sub" , clientID )
143151 .claim ("ctx" , context )
144152 .claim ("tok" , dataToken )
153+ .claim ("aud" , finalTokenUri )
145154 .expiration (expirationDate )
146155 .signWith (pvtKey , Jwts .SIG .RS256 )
147156 .compact ();
@@ -155,9 +164,9 @@ public synchronized List<SignedDataTokenResponse> getSignedDataTokens() throws S
155164 LogUtil .printInfoLog (InfoLogs .GET_SIGNED_DATA_TOKENS_TRIGGERED .getLog ());
156165 List <SignedDataTokenResponse > signedToken = new ArrayList <>();
157166 if (this .credentialsFile != null && Objects .equals (this .credentialsType , "FILE" )) {
158- signedToken = generateSignedTokenFromCredentialsFile (this .credentialsFile , this .dataTokens , this .timeToLive , this .ctx );
167+ signedToken = generateSignedTokenFromCredentialsFile (this .credentialsFile , this .dataTokens , this .timeToLive , this .ctx , this . tokenUri );
159168 } else if (this .credentialsString != null && Objects .equals (this .credentialsType , "STRING" )) {
160- signedToken = generateSignedTokensFromCredentialsString (this .credentialsString , this .dataTokens , this .timeToLive , this .ctx );
169+ signedToken = generateSignedTokensFromCredentialsString (this .credentialsString , this .dataTokens , this .timeToLive , this .ctx , this . tokenUri );
161170 }
162171 LogUtil .printInfoLog (InfoLogs .GET_SIGNED_DATA_TOKEN_SUCCESS .getLog ());
163172 return signedToken ;
@@ -170,6 +179,7 @@ public static class SignedDataTokensBuilder {
170179 private String credentialsString ;
171180 private String ctx ;
172181 private String credentialsType ;
182+ private String tokenUri ;
173183
174184 private SignedDataTokensBuilder () {
175185 }
@@ -205,6 +215,19 @@ public SignedDataTokensBuilder setTimeToLive(Integer timeToLive) {
205215 return this ;
206216 }
207217
218+ public SignedDataTokensBuilder setTokenUri (String tokenUri ) throws SkyflowException {
219+ if (tokenUri != null && !tokenUri .isEmpty ()) {
220+ try {
221+ new java .net .URL (tokenUri );
222+ this .tokenUri = tokenUri ;
223+ } catch (MalformedURLException e ) {
224+ LogUtil .printErrorLog (ErrorLogs .INVALID_TOKEN_URI .getLog ());
225+ throw new SkyflowException (ErrorCode .INVALID_INPUT .getCode (), ErrorMessage .InvalidTokenUri .getMessage ());
226+ }
227+ }
228+ return this ;
229+ }
230+
208231 public SignedDataTokens build () {
209232 return new SignedDataTokens (this );
210233 }
0 commit comments