Consolidate shared plumbing into AbstractOAuthService

Token exchange, the authorization redirect, the version and the name
were repeated in both StandardResourceOAuthService and
StandardIdTokenOAuthService. Pull them into a common
AbstractOAuthService that both now extend, so the four methods and the
client/log/name state exist once.

Migrate the two remaining hybrid providers, google and azure, onto the
same base with their own getUserInfo. Both fetch a resource and also
validate a claim from the id_token: google matches the hosted
domain (hd), azure matches the tenant (tid) and audience (aud), and both
return null to deny login on mismatch. They now fetch through
OAuthClient instead of a raw OAuth20Service.

Google keeps its authorization-redirect customization by overriding
getAuthorizationInfo to append the hd parameter.

Azure needs its "Accept: */*" request header, so OAuthClient gains a
get overload taking extra headers; the plain get delegates to it with
none. With this, google and azure no longer import ScribeJava request,
response or token types.

Change-Id: I2e263ee5f7ffca533a2ed92b396c77b83f44bade
8 files changed
tree: ad4ac4debe7f9d891c50c275b596d560521beddf
  1. .settings/
  2. src/
  3. tools/
  4. .bazelignore
  5. .bazelrc
  6. .bazelversion
  7. .gitignore
  8. .travis.yml
  9. BUILD
  10. external_plugin_deps.MODULE.bazel
  11. LICENSE
  12. LICENSE-scribe
  13. MODULE.bazel
  14. MODULE.bazel.lock
  15. oauth_plugin_deps.lock.json
  16. oauth_third_party_runtime_jars.allowlist.txt
  17. README.md
README.md

Gerrit OAuth2 authentication provider

Build Status

With this plugin Gerrit can use OAuth2 protocol for authentication. Supported OAuth providers:

See the Wiki what it can do for you.

Prebuilt artifacts

Prebuilt binary artifacts are available on release page. Make sure to pick the right JAR for your Gerrit version.

Build

To build the plugin with Bazel, install Bazel and run the following:

  git clone https://gerrit.googlesource.com/plugins/oauth
  cd oauth && bazel build oauth

Install

Copy the bazel-bin/oauth.jar to $gerrit_site/plugins and re-run init to configure it:

  java -jar gerrit.war init -d <site>
  [...]
  *** OAuth Authentication Provider
  ***
  Use Bitbucket OAuth provider for Gerrit login ? [Y/n]? n
  Use Google OAuth provider for Gerrit login ? [Y/n]?
  Application client id          : <client-id>
  Application client secret      : 
                confirm password : 
  Link to OpenID accounts? [true]: 
  Use GitHub OAuth provider for Gerrit login ? [Y/n]? n

Reporting bugs

Make sure to read the FAQ before reporting issues.

License

Apache License 2.0