Skip to content
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

allow synchronizing user status from OAuth2 login providers #31572

Merged
merged 7 commits into from
Jul 16, 2024

Conversation

bohde
Copy link
Contributor

@bohde bohde commented Jul 5, 2024

This leverages the existing sync_external_users cron job to synchronize the IsActive flag on users who use an OAuth2 provider set to synchronize. This synchronization is done by checking for expired access tokens, and using the stored refresh token to request a new access token. If the response back from the OAuth2 provider is the invalid_grant error code, the user is marked as inactive. However, the user is able to reactivate their account by logging in the web browser through their OAuth2 flow.

Also changed to support this is that a linked ExternalLoginUser is always created upon a login or signup via OAuth2.

Notes on updating permissions

Ideally, we would also refresh permissions from the configured OAuth provider (e.g., admin, restricted and group mappings) to match the implementation of LDAP. However, the OAuth library used for this goth, doesn't seem to support issuing a session via refresh tokens. The interface provides a RefreshToken method, but the returned oauth.Token doesn't implement the goth.Session we would need to call FetchUser. Due to specific implementations, we would need to build a compatibility function for every provider, since they cast to concrete types (e.g. Azure)

This leverages the existing `sync_external_users` cron job to
synchronize the IsActive flag on users who use an OAuth2 provider set
to synchronize. This synchronization is done
by checking for expired access tokens, and using the stored refresh
token to request a new access token. If the response back from the
OAuth2 provider is the `invalid_grant` error code, the user is marked
as inactive. However, the user is able to reactivate their account by
logging in the web browser through their OAuth flow.

Also changed to support this is that a linked `ExternalLoginUser` is
always created upon a login or signup via OAuth2.
@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Jul 5, 2024
@pull-request-size pull-request-size bot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Jul 5, 2024
@github-actions github-actions bot added modifies/go Pull requests that update Go code modifies/templates This PR modifies the template files labels Jul 5, 2024
@kdumontnu
Copy link
Contributor

Backlinking to tracking issue #23794

@kdumontnu kdumontnu mentioned this pull request Jul 9, 2024
6 tasks
@GiteaBot GiteaBot added lgtm/need 1 This PR needs approval from one additional maintainer to be merged. and removed lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. labels Jul 16, 2024
@bohde bohde requested a review from kdumontnu July 16, 2024 18:06
Copy link
Contributor

@kdumontnu kdumontnu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Jul 16, 2024
@6543 6543 merged commit 416c36f into go-gitea:main Jul 16, 2024
26 checks passed
@GiteaBot GiteaBot added this to the 1.23.0 milestone Jul 16, 2024
zjjhot added a commit to zjjhot/gitea that referenced this pull request Jul 17, 2024
* giteaofficial/main:
  [skip ci] Updated translations via Crowdin
  Allow searching issues by ID (go-gitea#31479)
  allow synchronizing user status from OAuth2 login providers (go-gitea#31572)
  Enable `no-jquery/no-class-state` (go-gitea#31639)
  Added default sorting milestones by name (go-gitea#27084)
silverwind added a commit to techknowlogick/gitea that referenced this pull request Jul 23, 2024
* origin/main: (59 commits)
  fix OIDC introspection authentication (go-gitea#31632)
  Enable direnv (go-gitea#31672)
  [skip ci] Updated translations via Crowdin
  [skip ci] Updated translations via Crowdin
  fix redis dep (go-gitea#31662)
  add skip secondary authorization option for public oauth2 clients (go-gitea#31454)
  Fix a branch divergence cache bug (go-gitea#31659)
  [skip ci] Updated translations via Crowdin
  Remove unneccessary uses of `word-break: break-all` (go-gitea#31637)
  [skip ci] Updated translations via Crowdin
  Allow searching issues by ID (go-gitea#31479)
  allow synchronizing user status from OAuth2 login providers (go-gitea#31572)
  Enable `no-jquery/no-class-state` (go-gitea#31639)
  Added default sorting milestones by name (go-gitea#27084)
  Code editor theme enhancements (go-gitea#31629)
  Add option to change mail from user display name (go-gitea#31528)
  Upgrade xorm to v1.3.9 and improve some migrations Sync (go-gitea#29899)
  Issue Templates: add option to have dropdown printed list (go-gitea#31577)
  Fix update flake (go-gitea#31626)
  [skip ci] Updated translations via Crowdin
  ...
@go-gitea go-gitea locked as resolved and limited conversation to collaborators Oct 14, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. modifies/go Pull requests that update Go code modifies/templates This PR modifies the template files size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants