[feat] Add support for the device authentication flow for github apps #2146
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Opening as a draft since the tests are not ready and I have questions about them
This PR provides support for the device authentication flow for github apps, as documented in https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app#using-the-device-flow-to-generate-a-user-access-token (access token generation) and here https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens#refreshing-a-user-access-token-with-a-refresh-token (refresh token).
This is needed when developing java CLIs that need to authenticate to GitHub through a GitHub application.
Reproducing here the documentation to help with the understanding:
Opened questions I have:
DeviceFlowGithubAppAuthorizationProvider
) cannot be in the authorization package (needs access to a package protected method).https://github.com/...
). I didn't find anything in the base class test that would help with this. Also I have to use the.setRawUrlPath("https://github.com/login/oauth/access_token")
which cannot be intercepted as is obviously. This is not only a problem for tests but also for on prem Github and my current thinking is that I need to enrich the API and the testing framework to support auiUrl
that would be the equivalent of theapiUrl
for the UI.Since this starts to widen the impact of this change I'm opening this draft to discuss the potential approaches before going further.
Before submitting a PR:
@link
JavaDoc entries to the relevant documentation on https://docs.github.com/en/rest .mvn -D enable-ci clean install site "-Dsurefire.argLine=--add-opens java.base/java.net=ALL-UNNAMED"
locally. If this command doesn't succeed, your change will not pass CI.main
. You will create your PR from that branch.When creating a PR: