22
33import java .time .Instant ;
44
5+ import io .weaviate .client6 .v1 .api .WeaviateOAuthException ;
56import io .weaviate .client6 .v1 .internal .oidc .OidcConfig ;
67import io .weaviate .client6 .v1 .internal .oidc .nimbus .NimbusTokenProvider ;
78
9+ /** TokenProvider obtains authentication tokens. */
810@ FunctionalInterface
911public interface TokenProvider {
1012 Token getToken ();
1113
14+ /** Token represents an access_token + refresh_token pair. */
1215 public record Token (String accessToken , String refreshToken , Instant createdAt , long expiresIn ) {
16+ /**
17+ * Returns {@code true} if remaining lifetime of the token is greater than 0.
18+ * Tokens created with {@link #expireNever} are always valid.
19+ */
1320 public boolean isValid () {
1421 if (expiresIn == -1 ) {
1522 return true ;
@@ -18,17 +25,39 @@ public boolean isValid() {
1825 return Instant .now ().isAfter (createdAt .plusSeconds (expiresIn ));
1926 }
2027
28+ /**
29+ * Create a token with an expiration and a refresh_token.
30+ *
31+ * @param accessToken Access token.
32+ * @param refreshToken Refresh token.
33+ * @param expiresIn Remaining token lifetime in seconds.
34+ *
35+ * @return A new Token.
36+ */
2137 public static Token expireAfter (String accessToken , String refreshToken , long expiresIn ) {
2238 return new Token (accessToken , refreshToken , Instant .now (), expiresIn );
2339 }
2440
41+ /**
42+ * Create a token that does not have a refresh_token.
43+ *
44+ * @param accessToken Access token.
45+ * @param expiresIn Remaining token lifetime in seconds.
46+ *
47+ * @return A new Token.
48+ */
2549 public static Token expireAfter (String accessToken , long expiresIn ) {
2650 return expireAfter (accessToken , null , expiresIn );
2751 }
2852
29- /** Create a token that never expires. */
53+ /**
54+ * Create a token that never expires.
55+ *
56+ * @param accessToken Access token.
57+ * @return A new Token.
58+ */
3059 public static Token expireNever (String accessToken ) {
31- return Token .expireAfter (accessToken , "" , -1 );
60+ return Token .expireAfter (accessToken , -1 );
3261 }
3362 }
3463
@@ -37,26 +66,68 @@ public static TokenProvider staticToken(String accessToken) {
3766 return () -> token ;
3867 }
3968
69+ /**
70+ * Create a TokenProvider that uses an existing access_token + refresh_token
71+ * pair.
72+ *
73+ * @param oidc OIDC config.
74+ * @param accessToken Access token.
75+ * @param refreshToken Refresh token.
76+ * @param expiresIn Remaining token lifetime in seconds.
77+ *
78+ * @return Internal TokenProvider implementation.
79+ * @throws WeaviateOAuthException if an error occurred at any point of the
80+ * exchange process.
81+ */
4082 public static TokenProvider bearerToken (OidcConfig oidc , String accessToken , String refreshToken , long expiresIn ) {
4183 final var token = Token .expireAfter (accessToken , refreshToken , expiresIn );
42- final var provider = NimbusTokenProvider .bearerToken (oidc , token );
84+ final var provider = NimbusTokenProvider .refreshToken (oidc , token );
4385 return reuse (token , provider );
4486 }
4587
88+ /**
89+ * Create a TokenProvider that uses Resource Owner Password authorization grant.
90+ *
91+ * @param oidc OIDC config.
92+ * @param username Resource owner username.
93+ * @param password Resource owner password.
94+ *
95+ * @return Internal TokenProvider implementation.
96+ * @throws WeaviateOAuthException if an error occured at any point of the token
97+ * exchange process.
98+ */
4699 public static TokenProvider resourceOwnerPassword (OidcConfig oidc , String username , String password ) {
47100 final var passwordGrant = NimbusTokenProvider .resourceOwnerPassword (oidc , username , password );
48101 return reuse (null , exchange (oidc , passwordGrant ));
49102 }
50103
104+ /**
105+ * Create a TokenProvider that uses Client Credentials authorization grant.
106+ *
107+ * @param oidc OIDC config.
108+ * @param clientId Client ID.
109+ * @param clientSecret Client secret.
110+ *
111+ * @return Internal TokenProvider implementation.
112+ * @throws WeaviateOAuthException if an error occured at any point while
113+ * obtaining a new token.
114+ */
51115 public static TokenProvider clientCredentials (OidcConfig oidc , String clientId , String clientSecret ) {
52116 final var provider = NimbusTokenProvider .clientCredentials (oidc , clientId , clientSecret );
53117 return reuse (null , provider );
54118 }
55119
120+ /**
121+ * Obtain a TokenProvider that exchanges an authorization grant for a new Token.
122+ */
56123 static TokenProvider exchange (OidcConfig oidc , TokenProvider tp ) {
57124 return new ExchangeTokenProvider (oidc , tp );
58125 }
59126
127+ /**
128+ * Obtain a TokenProvider which reuses tokens obtained
129+ * from another TokenProvider until they expire.
130+ */
60131 static TokenProvider reuse (Token t , TokenProvider tp ) {
61132 return ReuseTokenProvider .wrap (t , tp );
62133 }
0 commit comments