OAuth2 auto-register (#5123)

* Refactored handleOAuth2SignIn in routers/user/auth.go

The function handleOAuth2SignIn was called twice but some code path could only
be reached by one of the invocations. Moved the unnecessary code path out of
handleOAuth2SignIn.


* Refactored user creation

There was common code to create a user and display the correct error message.
And after the creation the only user should be an admin and if enabled a
confirmation email should be sent. This common code is now abstracted into
two functions and a helper function to call both.

* Added auto-register for OAuth2 users

If enabled new OAuth2 users will be registered with their OAuth2 details.
The UserID, Name and Email fields from the gothUser are used.
Therefore the OpenID Connect provider needs additional scopes to return
the coresponding claims.

* Added error for missing fields in OAuth2 response

* Linking and auto linking on oauth2 registration

* Set default username source to nickname

* Add automatic oauth2 scopes for github and google

* Add hint to change the openid connect scopes if fields are missing

* Extend info about auto linking security risk

Co-authored-by: Viktor Kuzmin <kvaster@gmail.com>
Signed-off-by: Martin Michaelis <code@mgjm.de>
This commit is contained in:
Martin Michaelis 2021-04-14 14:02:12 +02:00 committed by GitHub
parent ca2e1d8090
commit 55eb1745bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 352 additions and 136 deletions

View file

@ -617,6 +617,30 @@ WHITELISTED_URIS =
; Example value: loadaverage.org/badguy stackexchange.com/.*spammer
BLACKLISTED_URIS =
[oauth2_client]
; Whether a new auto registered oauth2 user needs to confirm their email.
; Do not include to use the REGISTER_EMAIL_CONFIRM setting from the `[service]` section.
REGISTER_EMAIL_CONFIRM =
; Scopes for the openid connect oauth2 provider (seperated by space, the openid scope is implicitly added).
; Typical values are profile and email.
; For more information about the possible values see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
OPENID_CONNECT_SCOPES =
; Automatically create user accounts for new oauth2 users.
ENABLE_AUTO_REGISTRATION = false
; The source of the username for new oauth2 accounts:
; userid = use the userid / sub attribute
; nickname = use the nickname attribute
; email = use the username part of the email attribute
USERNAME = nickname
; Update avatar if available from oauth2 provider.
; Update will be performed on each login.
UPDATE_AVATAR = false
; How to handle if an account / email already exists:
; disabled = show an error
; login = show an account linking login
; auto = link directly with the account
ACCOUNT_LINKING = disabled
[service]
; Time limit to confirm account/email registration
ACTIVE_CODE_LIVE_MINUTES = 180