-
Notifications
You must be signed in to change notification settings - Fork 97
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
Replace EOL Google Oauth library #409
Changes from all commits
60fc090
347dd4d
2941d99
227d072
5b51704
7b753d6
659ecfc
0ebc81b
fb4ce0c
a594a27
7116a7b
f8230ef
769f395
d5e1522
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 |
---|---|---|
@@ -0,0 +1,70 @@ | ||
package org.jenkinsci.plugins.oic; | ||
|
||
import com.nimbusds.jose.JWSAlgorithm; | ||
import com.nimbusds.jwt.JWT; | ||
import com.nimbusds.jwt.JWTClaimsSet; | ||
import com.nimbusds.oauth2.sdk.ParseException; | ||
import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod; | ||
import com.nimbusds.oauth2.sdk.id.Issuer; | ||
import com.nimbusds.openid.connect.sdk.Nonce; | ||
import com.nimbusds.openid.connect.sdk.SubjectType; | ||
import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet; | ||
import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata; | ||
import java.net.URI; | ||
import java.net.URISyntaxException; | ||
import java.util.List; | ||
import java.util.logging.Level; | ||
import java.util.logging.Logger; | ||
import org.pac4j.core.exception.TechnicalException; | ||
import org.pac4j.oidc.config.OidcConfiguration; | ||
import org.pac4j.oidc.profile.creator.TokenValidator; | ||
|
||
public class AnythingGoesTokenValidator extends TokenValidator { | ||
|
||
public static final Logger LOGGER = Logger.getLogger(AnythingGoesTokenValidator.class.getName()); | ||
|
||
public AnythingGoesTokenValidator() { | ||
super(createFakeOidcConfiguration()); | ||
} | ||
|
||
@Override | ||
public IDTokenClaimsSet validate(final JWT idToken, final Nonce expectedNonce) { | ||
// validation is disabled, so everything is valid. | ||
try { | ||
return new IDTokenClaimsSet(idToken.getJWTClaimsSet()); | ||
} catch (ParseException | java.text.ParseException e) { | ||
LOGGER.log( | ||
Level.WARNING, | ||
"Token validation is disabled, but the token is corrupt and claims will not be represted.", | ||
e); | ||
try { | ||
return new IDTokenClaimsSet(new JWTClaimsSet.Builder().build()); | ||
} catch (ParseException e1) { | ||
throw new TechnicalException("could not create and empty IDTokenClaimsSet"); | ||
Check warning on line 43 in src/main/java/org/jenkinsci/plugins/oic/AnythingGoesTokenValidator.java ci.jenkins.io / Code CoverageNot covered lines
|
||
} | ||
} | ||
} | ||
|
||
/** | ||
* Annoyingly the super class needs an OidcConfiguration with some values set, | ||
* which if we are not validating we may not actually have (e.g. jwks_url). | ||
* So we need a configuration with this set just so the validator can say "this is valid". | ||
*/ | ||
private static OidcConfiguration createFakeOidcConfiguration() { | ||
try { | ||
OidcConfiguration config = new OidcConfiguration(); | ||
config.setClientId("ignored"); | ||
config.setSecret("ignored"); | ||
OIDCProviderMetadata providerMetadata = new OIDCProviderMetadata( | ||
new Issuer("http://ignored"), List.of(SubjectType.PUBLIC), new URI("http://ignored.and.invalid./")); | ||
providerMetadata.setIDTokenJWSAlgs(List.of(JWSAlgorithm.HS256)); | ||
config.setProviderMetadata(providerMetadata); | ||
config.setPreferredJwsAlgorithm(JWSAlgorithm.HS256); | ||
config.setClientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC); | ||
return config; | ||
} catch (URISyntaxException e) { | ||
// should never happen the urls we are using are valid | ||
throw new IllegalStateException(e); | ||
Check warning on line 67 in src/main/java/org/jenkinsci/plugins/oic/AnythingGoesTokenValidator.java ci.jenkins.io / Code CoverageNot covered lines
|
||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package org.jenkinsci.plugins.oic; | ||
|
||
import com.nimbusds.oauth2.sdk.http.HTTPRequest; | ||
import hudson.ProxyConfiguration; | ||
import java.net.Proxy; | ||
import java.net.http.HttpRequest; | ||
import java.security.KeyManagementException; | ||
import java.security.NoSuchAlgorithmException; | ||
import javax.net.ssl.HostnameVerifier; | ||
import javax.net.ssl.SSLContext; | ||
import jenkins.model.Jenkins; | ||
import jenkins.security.FIPS140; | ||
import org.jenkinsci.plugins.oic.ssl.IgnoringHostNameVerifier; | ||
import org.jenkinsci.plugins.oic.ssl.TLSUtils; | ||
import org.pac4j.oidc.config.OidcConfiguration; | ||
|
||
/** | ||
* An OidcConfiguration that will customize {@link HttpRequest} with the Jenkins proxy, and iff TLS is disabled a lenient {@link HostnameVerifier} and {@link SSLContext}. | ||
*/ | ||
class CustomOidcConfiguration extends OidcConfiguration { | ||
|
||
private final boolean disableTLS; | ||
|
||
CustomOidcConfiguration(boolean disableTLS) { | ||
this.disableTLS = disableTLS; | ||
if (FIPS140.useCompliantAlgorithms() && disableTLS) { | ||
throw new IllegalStateException("Cannot disable TLS validation in FIPS-140 mode"); | ||
Check warning on line 27 in src/main/java/org/jenkinsci/plugins/oic/CustomOidcConfiguration.java ci.jenkins.io / Code CoverageNot covered line
|
||
} | ||
} | ||
|
||
@Override | ||
public void configureHttpRequest(HTTPRequest request) { | ||
Proxy proxy = null; | ||
Jenkins jenkins = Jenkins.getInstanceOrNull(); | ||
if (jenkins != null) { // unit tests | ||
ProxyConfiguration pc = jenkins.getProxy(); | ||
if (pc != null) { | ||
proxy = pc.createProxy(request.getURL().getHost()); | ||
Check warning on line 38 in src/main/java/org/jenkinsci/plugins/oic/CustomOidcConfiguration.java ci.jenkins.io / Code CoverageNot covered line
|
||
} | ||
} | ||
request.setProxy(proxy); | ||
if (disableTLS) { | ||
request.setHostnameVerifier(IgnoringHostNameVerifier.INSTANCE); | ||
try { | ||
request.setSSLSocketFactory(TLSUtils.createAnythingGoesSSLSocketFactory()); | ||
} catch (KeyManagementException | NoSuchAlgorithmException e) { | ||
throw new IllegalStateException("could not configure the SSLFactory, this should not be possible", e); | ||
Check warning on line 47 in src/main/java/org/jenkinsci/plugins/oic/CustomOidcConfiguration.java ci.jenkins.io / Code CoverageNot covered lines
|
||
} | ||
} | ||
super.configureHttpRequest(request); | ||
} | ||
} |
This file was deleted.
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.
For my own learning.
IllegalState instead of IllegalArgument because this is only used during login, so it means configuration was already wrong (and should have been raised when creating the realm once jtnord#1 is merged) isn't it?
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.
correct