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
1818import com .google .api .client .json .gson .GsonFactory ;
1919import 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 ;
2420import java .io .IOException ;
2521import 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+ */
2732public 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