Skip to content

Commit a7592aa

Browse files
authored
Merge pull request #925 from sigstore/tokenstring
Make token string oidc client available outside of cli
2 parents 617ea59 + 8fa9e30 commit a7592aa

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

sigstore-cli/src/main/java/dev/sigstore/cli/Sign.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import dev.sigstore.KeylessSigner;
1919
import dev.sigstore.TrustedRootProvider;
2020
import dev.sigstore.oidc.client.OidcClients;
21+
import dev.sigstore.oidc.client.TokenStringOidcClient;
2122
import dev.sigstore.tuf.RootProvider;
2223
import dev.sigstore.tuf.SigstoreTufClient;
2324
import java.net.URL;
@@ -110,7 +111,7 @@ public Integer call() throws Exception {
110111
if (identityToken != null) {
111112
// If we've explicitly provided an identity token, customize the signer to only use the token
112113
// string OIDC client.
113-
signerBuilder.oidcClients(OidcClients.of(new TokenStringOidcClient(identityToken)));
114+
signerBuilder.oidcClients(OidcClients.of(TokenStringOidcClient.from(identityToken)));
114115
}
115116
var signer = signerBuilder.build();
116117
var bundle = signer.signFile(artifact);

sigstore-cli/src/main/java/dev/sigstore/cli/TokenStringOidcClient.java renamed to sigstore-java/src/main/java/dev/sigstore/oidc/client/TokenStringOidcClient.java

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,36 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package dev.sigstore.cli;
16+
package dev.sigstore.oidc.client;
1717

1818
import com.google.api.client.json.gson.GsonFactory;
1919
import com.google.api.client.json.webtoken.JsonWebSignature;
20-
import dev.sigstore.oidc.client.ImmutableOidcToken;
21-
import dev.sigstore.oidc.client.OidcClient;
22-
import dev.sigstore.oidc.client.OidcException;
23-
import dev.sigstore.oidc.client.OidcToken;
2420
import java.io.IOException;
2521
import java.util.Map;
2622

23+
/**
24+
* This should only be used when the user has an out of band mechanism for obtaining an OIDC token
25+
* to be consumed by a sigstore signing event. So it should not be included in any defaults for
26+
* {@link OidcClients}.
27+
*
28+
* <p>It's not explicitly designed for multi use, but implementers of the {@link
29+
* TokenStringProvider} may include mechanisms for longer lived signing events. Each time a token is
30+
* requested, the provider may execute a fetch of the token.
31+
*/
2732
public class TokenStringOidcClient implements OidcClient {
2833

29-
private final String idToken;
34+
private final TokenStringProvider idTokenProvider;
35+
36+
TokenStringOidcClient(TokenStringProvider provider) {
37+
this.idTokenProvider = provider;
38+
}
39+
40+
public static TokenStringOidcClient from(TokenStringProvider provider) {
41+
return new TokenStringOidcClient(provider);
42+
}
3043

31-
public TokenStringOidcClient(String idToken) {
32-
this.idToken = idToken;
44+
public static TokenStringOidcClient from(String token) {
45+
return new TokenStringOidcClient(() -> token);
3346
}
3447

3548
@Override
@@ -40,6 +53,7 @@ public boolean isEnabled(Map<String, String> env) {
4053
@Override
4154
public OidcToken getIDToken(Map<String, String> env) throws OidcException {
4255
try {
56+
var idToken = idTokenProvider.getTokenString();
4357
var jws = JsonWebSignature.parse(new GsonFactory(), idToken);
4458
return ImmutableOidcToken.builder()
4559
.idToken(idToken)
@@ -48,6 +62,13 @@ public OidcToken getIDToken(Map<String, String> env) throws OidcException {
4862
.build();
4963
} catch (IOException e) {
5064
throw new OidcException("Failed to parse JWT", e);
65+
} catch (Exception e) {
66+
throw new OidcException("Failed to obtain token", e);
5167
}
5268
}
69+
70+
@FunctionalInterface
71+
public interface TokenStringProvider {
72+
String getTokenString() throws Exception;
73+
}
5374
}

0 commit comments

Comments
 (0)