-
Notifications
You must be signed in to change notification settings - Fork 232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Support transport and binding-enforcement MDS parameters. #1558
Changes from 10 commits
91dba11
ba11e8a
47ec152
9d46bbd
3cb6e98
cb70556
4d0440b
c96df22
a625889
3d46963
f36a19c
8a2d967
ce74e45
8ce3a4d
838380f
e921991
20964e2
94618e0
9261fe8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -109,6 +109,40 @@ public class ComputeEngineCredentials extends GoogleCredentials | |||||
static final int MAX_COMPUTE_PING_TRIES = 3; | ||||||
static final int COMPUTE_PING_CONNECTION_TIMEOUT_MS = 500; | ||||||
|
||||||
public enum AuthTransport { | ||||||
// Authenticating to Google APIs via DirectPath | ||||||
ALTS("alts"), | ||||||
// Authenticating to Google APIs via GFE | ||||||
MTLS("mtls"); | ||||||
|
||||||
private final String label; | ||||||
|
||||||
private AuthTransport(String label) { | ||||||
this.label = label; | ||||||
} | ||||||
|
||||||
public String getLabel() { | ||||||
return label; | ||||||
} | ||||||
} | ||||||
|
||||||
public enum BindingEnforcement { | ||||||
// Binding enforcement will always happen, irrespective of the IAM policy. | ||||||
ON("on"), | ||||||
// Binding enforcement will depend on IAM policy. | ||||||
IAMPOLICY("iam-policy"); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I believe the convention is underscore to separate the words for constants There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done in f36a19c |
||||||
|
||||||
private final String label; | ||||||
|
||||||
private BindingEnforcement(String label) { | ||||||
this.label = label; | ||||||
} | ||||||
|
||||||
public String getLabel() { | ||||||
return label; | ||||||
} | ||||||
} | ||||||
|
||||||
private static final String METADATA_FLAVOR = "Metadata-Flavor"; | ||||||
private static final String GOOGLE = "Google"; | ||||||
private static final String WINDOWS = "windows"; | ||||||
|
@@ -122,6 +156,9 @@ public class ComputeEngineCredentials extends GoogleCredentials | |||||
|
||||||
private final Collection<String> scopes; | ||||||
|
||||||
private final AuthTransport transport; | ||||||
private final BindingEnforcement bindingEnforcement; | ||||||
|
||||||
private transient HttpTransportFactory transportFactory; | ||||||
private transient String serviceAccountEmail; | ||||||
|
||||||
|
@@ -152,6 +189,8 @@ private ComputeEngineCredentials(ComputeEngineCredentials.Builder builder) { | |||||
scopeList.removeAll(Arrays.asList("", null)); | ||||||
this.scopes = ImmutableSet.<String>copyOf(scopeList); | ||||||
} | ||||||
this.transport = builder.getTransport(); | ||||||
this.bindingEnforcement = builder.getBindingEnforcement(); | ||||||
} | ||||||
|
||||||
@Override | ||||||
|
@@ -191,7 +230,10 @@ public final Collection<String> getScopes() { | |||||
} | ||||||
|
||||||
/** | ||||||
* If scopes is specified, add "?scopes=comma-separated-list-of-scopes" to the token url. | ||||||
* If scopes is specified, add "?scopes=comma-separated-list-of-scopes" to the token url. If | ||||||
* transport is specified, add "?transport=xyz" to the token url; xyz is one of "alts" or "mtls". | ||||||
* If bindingEnforcement is specified, add "?binding-enforcement=xyz" to the token url; xyz is one | ||||||
* of "iam-policy" or "on". | ||||||
lqiu96 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* | ||||||
* @return token url with the given scopes | ||||||
*/ | ||||||
|
@@ -200,6 +242,12 @@ String createTokenUrlWithScopes() { | |||||
if (!scopes.isEmpty()) { | ||||||
tokenUrl.set("scopes", Joiner.on(',').join(scopes)); | ||||||
} | ||||||
if (transport != null) { | ||||||
tokenUrl.set("transport", transport.getLabel()); | ||||||
} | ||||||
if (bindingEnforcement != null) { | ||||||
tokenUrl.set("binding-enforcement", bindingEnforcement.getLabel()); | ||||||
} | ||||||
return tokenUrl.toString(); | ||||||
} | ||||||
|
||||||
|
@@ -643,6 +691,9 @@ public static class Builder extends GoogleCredentials.Builder { | |||||
private Collection<String> scopes; | ||||||
private Collection<String> defaultScopes; | ||||||
|
||||||
private AuthTransport transport; | ||||||
private BindingEnforcement bindingEnforcement; | ||||||
|
||||||
protected Builder() { | ||||||
setRefreshMargin(COMPUTE_REFRESH_MARGIN); | ||||||
setExpirationMargin(COMPUTE_EXPIRATION_MARGIN); | ||||||
|
@@ -684,6 +735,18 @@ public Builder setQuotaProjectId(String quotaProjectId) { | |||||
return this; | ||||||
} | ||||||
|
||||||
@CanIgnoreReturnValue | ||||||
public Builder setTransport(AuthTransport transport) { | ||||||
this.transport = transport; | ||||||
return this; | ||||||
} | ||||||
|
||||||
@CanIgnoreReturnValue | ||||||
public Builder setBindingEnforcement(BindingEnforcement bindingEnforcement) { | ||||||
this.bindingEnforcement = bindingEnforcement; | ||||||
return this; | ||||||
} | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you some small/ simple javadocs for these public setters? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done in 8a2d967 |
||||||
|
||||||
public HttpTransportFactory getHttpTransportFactory() { | ||||||
return transportFactory; | ||||||
} | ||||||
|
@@ -696,6 +759,14 @@ public Collection<String> getDefaultScopes() { | |||||
return defaultScopes; | ||||||
} | ||||||
|
||||||
public AuthTransport getTransport() { | ||||||
return transport; | ||||||
} | ||||||
|
||||||
public BindingEnforcement getBindingEnforcement() { | ||||||
return bindingEnforcement; | ||||||
} | ||||||
|
||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same here. also if it's returning AuthTransport, can it be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done in 8a2d967 |
||||||
@Override | ||||||
public ComputeEngineCredentials build() { | ||||||
return new ComputeEngineCredentials(this); | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think AuthTransport is ok for this. I would prefer if this could be more specific if possible.
Is there a term for alts and mtls type of transport that we can use? Does
TlsTransport
make sense? I don't know if TLS has a transport concept or if that would be confusing.GoogleMtlsTransport
? Though I'm not sure mtls/atls are google specific termsThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TLDR: WDYT of
GoogleAuthTransport
?We generally call this "transport type": describes how the client is authenticating to Google APIS either via GFE (using
mtls
) or via DirectPath (usingalts
). However Blake mentioned above that transport has a different meaning in Client libraries (grpc vs http), so it would be good to clarify to something more specific, which is how we landed onAuthTransport
initially.TLS is the security protocol being used, it's used in both mtls and alts. mtls is mutually authenticated TLS, alts is (in short) "Google-optimized" mtls (see public docs).
In the enum name, I think we want to focus on how clients are authenticating to Google APIS, not details of the protocol being used (mtls vs alts). How about
GoogleAuthTransport
? I think this captures that the enum is listing different ways to ways clients can authenticate to Google APIs.I've done this in 8ce3a4d, let me know if the name sounds ok.