feat(auth): Add Clerk OAuth Provider (#5553)

This commit is contained in:
Yassir Elmarissi
2025-06-18 14:29:46 +02:00
committed by GitHub
parent 4375f52c5d
commit a77bd88258
29 changed files with 63 additions and 7 deletions

View File

@@ -21,6 +21,7 @@ Coolify implements **defense-in-depth security** with multiple layers of protect
- **Supported Providers**: - **Supported Providers**:
- Google OAuth - Google OAuth
- Microsoft Azure AD - Microsoft Azure AD
- Clerk
- Authentik - Authentik
- Discord - Discord
- GitHub (via GitHub Apps) - GitHub (via GitHub Apps)

View File

@@ -90,7 +90,7 @@ alwaysApply: false
- **Purpose**: OAuth provider integration - **Purpose**: OAuth provider integration
- **Providers**: - **Providers**:
- GitHub, GitLab, Google - GitHub, GitLab, Google
- Microsoft Azure, Authentik, Discord - Microsoft Azure, Authentik, Discord, Clerk
- Custom OAuth implementations - Custom OAuth implementations
## Background Processing ## Background Processing

View File

@@ -27,6 +27,7 @@ class OauthSetting extends Model
case 'azure': case 'azure':
return filled($this->client_id) && filled($this->client_secret) && filled($this->tenant); return filled($this->client_id) && filled($this->client_secret) && filled($this->tenant);
case 'authentik': case 'authentik':
case 'clerk':
return filled($this->client_id) && filled($this->client_secret) && filled($this->base_url); return filled($this->client_id) && filled($this->client_secret) && filled($this->base_url);
default: default:
return filled($this->client_id) && filled($this->client_secret); return filled($this->client_id) && filled($this->client_secret);

View File

@@ -9,6 +9,7 @@ use Illuminate\Foundation\Events\MaintenanceModeEnabled;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use SocialiteProviders\Authentik\AuthentikExtendSocialite; use SocialiteProviders\Authentik\AuthentikExtendSocialite;
use SocialiteProviders\Azure\AzureExtendSocialite; use SocialiteProviders\Azure\AzureExtendSocialite;
use SocialiteProviders\Clerk\ClerkExtendSocialite;
use SocialiteProviders\Discord\DiscordExtendSocialite; use SocialiteProviders\Discord\DiscordExtendSocialite;
use SocialiteProviders\Google\GoogleExtendSocialite; use SocialiteProviders\Google\GoogleExtendSocialite;
use SocialiteProviders\Infomaniak\InfomaniakExtendSocialite; use SocialiteProviders\Infomaniak\InfomaniakExtendSocialite;
@@ -26,6 +27,7 @@ class EventServiceProvider extends ServiceProvider
SocialiteWasCalled::class => [ SocialiteWasCalled::class => [
AzureExtendSocialite::class.'@handle', AzureExtendSocialite::class.'@handle',
AuthentikExtendSocialite::class.'@handle', AuthentikExtendSocialite::class.'@handle',
ClerkExtendSocialite::class.'@handle',
DiscordExtendSocialite::class.'@handle', DiscordExtendSocialite::class.'@handle',
GoogleExtendSocialite::class.'@handle', GoogleExtendSocialite::class.'@handle',
InfomaniakExtendSocialite::class.'@handle', InfomaniakExtendSocialite::class.'@handle',

View File

@@ -22,15 +22,15 @@ function get_socialite_provider(string $provider)
return Socialite::driver('azure')->setConfig($azure_config); return Socialite::driver('azure')->setConfig($azure_config);
} }
if ($provider == 'authentik') { if ($provider == 'authentik' || $provider == 'clerk') {
$authentik_config = new \SocialiteProviders\Manager\Config( $authentik_clerk_config = new \SocialiteProviders\Manager\Config(
$oauth_setting->client_id, $oauth_setting->client_id,
$oauth_setting->client_secret, $oauth_setting->client_secret,
$oauth_setting->redirect_uri, $oauth_setting->redirect_uri,
['base_url' => $oauth_setting->base_url], ['base_url' => $oauth_setting->base_url],
); );
return Socialite::driver('authentik')->setConfig($authentik_config); return Socialite::driver($provider)->setConfig($authentik_clerk_config);
} }
if ($provider == 'google') { if ($provider == 'google') {

View File

@@ -39,6 +39,7 @@
"resend/resend-laravel": "^0.17.0", "resend/resend-laravel": "^0.17.0",
"sentry/sentry-laravel": "^4.13", "sentry/sentry-laravel": "^4.13",
"socialiteproviders/authentik": "^5.2", "socialiteproviders/authentik": "^5.2",
"socialiteproviders/clerk": "^5.0",
"socialiteproviders/discord": "^4.2", "socialiteproviders/discord": "^4.2",
"socialiteproviders/google": "^4.1", "socialiteproviders/google": "^4.1",
"socialiteproviders/infomaniak": "^4.0", "socialiteproviders/infomaniak": "^4.0",

28
composer.lock generated
View File

@@ -7483,6 +7483,17 @@
"time": "2023-11-07T22:21:16+00:00" "time": "2023-11-07T22:21:16+00:00"
}, },
{ {
"name": "socialiteproviders/clerk",
"version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/SocialiteProviders/Clerk.git",
"reference": "41e123036001ff37851b9622a910010c0e487d6a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SocialiteProviders/Clerk/zipball/41e123036001ff37851b9622a910010c0e487d6a",
"reference": "41e123036001ff37851b9622a910010c0e487d6a",
"name": "socialiteproviders/discord", "name": "socialiteproviders/discord",
"version": "4.2.0", "version": "4.2.0",
"source": { "source": {
@@ -7498,12 +7509,13 @@
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"php": "^7.4 || ^8.0", "php": "^8.0",
"socialiteproviders/manager": "~4.0" "socialiteproviders/manager": "^4.4"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"SocialiteProviders\\Clerk\\": ""
"SocialiteProviders\\Discord\\": "" "SocialiteProviders\\Discord\\": ""
} }
}, },
@@ -7513,6 +7525,13 @@
], ],
"authors": [ "authors": [
{ {
"name": "Ignacio Cano",
"email": "dev@nacho.sh"
}
],
"description": "Clerk OAuth2 Provider for Laravel Socialite",
"keywords": [
"clerk",
"name": "Christopher Eklund", "name": "Christopher Eklund",
"email": "eklundchristopher@gmail.com" "email": "eklundchristopher@gmail.com"
} }
@@ -7526,6 +7545,11 @@
"socialite" "socialite"
], ],
"support": { "support": {
"docs": "https://socialiteproviders.com/clerk",
"issues": "https://github.com/socialiteproviders/providers/issues",
"source": "https://github.com/socialiteproviders/providers"
},
"time": "2024-02-19T12:17:59+00:00"
"docs": "https://socialiteproviders.com/discord", "docs": "https://socialiteproviders.com/discord",
"issues": "https://github.com/socialiteproviders/providers/issues", "issues": "https://github.com/socialiteproviders/providers/issues",
"source": "https://github.com/socialiteproviders/providers" "source": "https://github.com/socialiteproviders/providers"

View File

@@ -46,6 +46,13 @@ return [
'redirect' => env('AUTHENTIK_REDIRECT_URI'), 'redirect' => env('AUTHENTIK_REDIRECT_URI'),
], ],
'clerk' => [
'client_id' => env('CLERK_CLIENT_ID'),
'client_secret' => env('CLERK_CLIENT_SECRET'),
'redirect' => env('CLERK_REDIRECT_URI'),
'base_url' => env('CLERK_BASE_URL'),
],
'google' => [ 'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'), 'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'),

View File

@@ -17,6 +17,7 @@ class OauthSettingSeeder extends Seeder
$providers = collect([ $providers = collect([
'azure', 'azure',
'bitbucket', 'bitbucket',
'clerk',
'discord', 'discord',
'github', 'github',
'gitlab', 'gitlab',

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "تسجيل الدخول باستخدام Authentik", "auth.login.authentik": "تسجيل الدخول باستخدام Authentik",
"auth.login.azure": "تسجيل الدخول باستخدام Microsoft", "auth.login.azure": "تسجيل الدخول باستخدام Microsoft",
"auth.login.bitbucket": "تسجيل الدخول باستخدام Bitbucket", "auth.login.bitbucket": "تسجيل الدخول باستخدام Bitbucket",
"auth.login.clerk": "تسجيل الدخول باستخدام Clerk",
"auth.login.discord": "تسجيل الدخول باستخدام Discord", "auth.login.discord": "تسجيل الدخول باستخدام Discord",
"auth.login.github": "تسجيل الدخول باستخدام GitHub", "auth.login.github": "تسجيل الدخول باستخدام GitHub",
"auth.login.gitlab": "تسجيل الدخول باستخدام Gitlab", "auth.login.gitlab": "تسجيل الدخول باستخدام Gitlab",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Authentik ilə daxil ol", "auth.login.authentik": "Authentik ilə daxil ol",
"auth.login.azure": "Azure ilə daxil ol", "auth.login.azure": "Azure ilə daxil ol",
"auth.login.bitbucket": "Bitbucket ilə daxil ol", "auth.login.bitbucket": "Bitbucket ilə daxil ol",
"auth.login.clerk": "Clerk ilə daxil ol",
"auth.login.discord": "Discord ilə daxil ol", "auth.login.discord": "Discord ilə daxil ol",
"auth.login.github": "Github ilə daxil ol", "auth.login.github": "Github ilə daxil ol",
"auth.login.gitlab": "GitLab ilə daxil ol", "auth.login.gitlab": "GitLab ilə daxil ol",

View File

@@ -2,6 +2,7 @@
"auth.login": "Přihlásit se", "auth.login": "Přihlásit se",
"auth.login.azure": "Přihlásit se pomocí Microsoftu", "auth.login.azure": "Přihlásit se pomocí Microsoftu",
"auth.login.bitbucket": "Přihlásit se pomocí Bitbucketu", "auth.login.bitbucket": "Přihlásit se pomocí Bitbucketu",
"auth.login.clerk": "Přihlásit se pomocí Clerk",
"auth.login.discord": "Přihlásit se pomocí Discordu", "auth.login.discord": "Přihlásit se pomocí Discordu",
"auth.login.github": "Přihlásit se pomocí GitHubu", "auth.login.github": "Přihlásit se pomocí GitHubu",
"auth.login.gitlab": "Přihlásit se pomocí Gitlabu", "auth.login.gitlab": "Přihlásit se pomocí Gitlabu",

View File

@@ -2,6 +2,7 @@
"auth.login": "Anmelden", "auth.login": "Anmelden",
"auth.login.azure": "Mit Microsoft anmelden", "auth.login.azure": "Mit Microsoft anmelden",
"auth.login.bitbucket": "Mit Bitbucket anmelden", "auth.login.bitbucket": "Mit Bitbucket anmelden",
"auth.login.clerk": "Mit Clerk anmelden",
"auth.login.discord": "Mit Discord anmelden", "auth.login.discord": "Mit Discord anmelden",
"auth.login.github": "Mit GitHub anmelden", "auth.login.github": "Mit GitHub anmelden",
"auth.login.gitlab": "Mit GitLab anmelden", "auth.login.gitlab": "Mit GitLab anmelden",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Login with Authentik", "auth.login.authentik": "Login with Authentik",
"auth.login.azure": "Login with Microsoft", "auth.login.azure": "Login with Microsoft",
"auth.login.bitbucket": "Login with Bitbucket", "auth.login.bitbucket": "Login with Bitbucket",
"auth.login.clerk": "Login with Clerk",
"auth.login.discord": "Login with Discord", "auth.login.discord": "Login with Discord",
"auth.login.github": "Login with GitHub", "auth.login.github": "Login with GitHub",
"auth.login.gitlab": "Login with Gitlab", "auth.login.gitlab": "Login with Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "Iniciar Sesión", "auth.login": "Iniciar Sesión",
"auth.login.azure": "Acceder con Microsoft", "auth.login.azure": "Acceder con Microsoft",
"auth.login.bitbucket": "Acceder con Bitbucket", "auth.login.bitbucket": "Acceder con Bitbucket",
"auth.login.clerk": "Acceder con Clerk",
"auth.login.discord": "Acceder con Discord", "auth.login.discord": "Acceder con Discord",
"auth.login.github": "Acceder con GitHub", "auth.login.github": "Acceder con GitHub",
"auth.login.gitlab": "Acceder con Gitlab", "auth.login.gitlab": "Acceder con Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "ورود", "auth.login": "ورود",
"auth.login.azure": "ورود با مایکروسافت", "auth.login.azure": "ورود با مایکروسافت",
"auth.login.bitbucket": "ورود با Bitbucket", "auth.login.bitbucket": "ورود با Bitbucket",
"auth.login.clerk": "ورود با Clerk",
"auth.login.discord": "ورود با Discord", "auth.login.discord": "ورود با Discord",
"auth.login.github": "ورود با گیت هاب", "auth.login.github": "ورود با گیت هاب",
"auth.login.gitlab": "ورود با گیت لب", "auth.login.gitlab": "ورود با گیت لب",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Connexion avec Authentik", "auth.login.authentik": "Connexion avec Authentik",
"auth.login.azure": "Connexion avec Microsoft", "auth.login.azure": "Connexion avec Microsoft",
"auth.login.bitbucket": "Connexion avec Bitbucket", "auth.login.bitbucket": "Connexion avec Bitbucket",
"auth.login.clerk": "Connexion avec Clerk",
"auth.login.discord": "Connexion avec Discord", "auth.login.discord": "Connexion avec Discord",
"auth.login.github": "Connexion avec GitHub", "auth.login.github": "Connexion avec GitHub",
"auth.login.gitlab": "Connexion avec Gitlab", "auth.login.gitlab": "Connexion avec Gitlab",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Masuk dengan Authentik", "auth.login.authentik": "Masuk dengan Authentik",
"auth.login.azure": "Masuk dengan Microsoft", "auth.login.azure": "Masuk dengan Microsoft",
"auth.login.bitbucket": "Masuk dengan Bitbucket", "auth.login.bitbucket": "Masuk dengan Bitbucket",
"auth.login.clerk": "Masuk dengan Clerk",
"auth.login.discord": "Masuk dengan Discord", "auth.login.discord": "Masuk dengan Discord",
"auth.login.github": "Masuk dengan GitHub", "auth.login.github": "Masuk dengan GitHub",
"auth.login.gitlab": "Masuk dengan Gitlab", "auth.login.gitlab": "Masuk dengan Gitlab",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Accedi con Authentik", "auth.login.authentik": "Accedi con Authentik",
"auth.login.azure": "Accedi con Microsoft", "auth.login.azure": "Accedi con Microsoft",
"auth.login.bitbucket": "Accedi con Bitbucket", "auth.login.bitbucket": "Accedi con Bitbucket",
"auth.login.clerk": "Accedi con Clerk",
"auth.login.discord": "Accedi con Discord", "auth.login.discord": "Accedi con Discord",
"auth.login.github": "Accedi con GitHub", "auth.login.github": "Accedi con GitHub",
"auth.login.gitlab": "Accedi con Gitlab", "auth.login.gitlab": "Accedi con Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "ログイン", "auth.login": "ログイン",
"auth.login.azure": "Microsoftでログイン", "auth.login.azure": "Microsoftでログイン",
"auth.login.bitbucket": "Bitbucketでログイン", "auth.login.bitbucket": "Bitbucketでログイン",
"auth.login.clerk": "Clerkでログイン",
"auth.login.discord": "Discordでログイン", "auth.login.discord": "Discordでログイン",
"auth.login.github": "GitHubでログイン", "auth.login.github": "GitHubでログイン",
"auth.login.gitlab": "Gitlabでログイン", "auth.login.gitlab": "Gitlabでログイン",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Logg inn med Authentik", "auth.login.authentik": "Logg inn med Authentik",
"auth.login.azure": "Logg inn med Microsoft", "auth.login.azure": "Logg inn med Microsoft",
"auth.login.bitbucket": "Logg inn med Bitbucket", "auth.login.bitbucket": "Logg inn med Bitbucket",
"auth.login.clerk": "Logg inn med Clerk",
"auth.login.discord": "Logg inn med Discord", "auth.login.discord": "Logg inn med Discord",
"auth.login.github": "Logg inn med GitHub", "auth.login.github": "Logg inn med GitHub",
"auth.login.gitlab": "Logg inn med Gitlab", "auth.login.gitlab": "Logg inn med Gitlab",

View File

@@ -3,6 +3,7 @@
"auth.login.authentik": "Entrar com Authentik", "auth.login.authentik": "Entrar com Authentik",
"auth.login.azure": "Entrar com Microsoft", "auth.login.azure": "Entrar com Microsoft",
"auth.login.bitbucket": "Entrar com Bitbucket", "auth.login.bitbucket": "Entrar com Bitbucket",
"auth.login.clerk": "Entrar com Clerk",
"auth.login.discord": "Entrar com Discord", "auth.login.discord": "Entrar com Discord",
"auth.login.github": "Entrar com GitHub", "auth.login.github": "Entrar com GitHub",
"auth.login.gitlab": "Entrar com Gitlab", "auth.login.gitlab": "Entrar com Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "Entrar", "auth.login": "Entrar",
"auth.login.azure": "Entrar com Microsoft", "auth.login.azure": "Entrar com Microsoft",
"auth.login.bitbucket": "Entrar com Bitbucket", "auth.login.bitbucket": "Entrar com Bitbucket",
"auth.login.clerk": "Entrar com Clerk",
"auth.login.discord": "Entrar com Discord", "auth.login.discord": "Entrar com Discord",
"auth.login.github": "Entrar com GitHub", "auth.login.github": "Entrar com GitHub",
"auth.login.gitlab": "Entrar com Gitlab", "auth.login.gitlab": "Entrar com Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "Autentificare", "auth.login": "Autentificare",
"auth.login.azure": "Autentificare prin Microsoft", "auth.login.azure": "Autentificare prin Microsoft",
"auth.login.bitbucket": "Autentificare prin Bitbucket", "auth.login.bitbucket": "Autentificare prin Bitbucket",
"auth.login.clerk": "Autentificare prin Clerk",
"auth.login.discord": "Autentificare prin Discord", "auth.login.discord": "Autentificare prin Discord",
"auth.login.github": "Autentificare prin GitHub", "auth.login.github": "Autentificare prin GitHub",
"auth.login.gitlab": "Autentificare prin Gitlab", "auth.login.gitlab": "Autentificare prin Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "Giriş", "auth.login": "Giriş",
"auth.login.azure": "Microsoft ile Giriş Yap", "auth.login.azure": "Microsoft ile Giriş Yap",
"auth.login.bitbucket": "Bitbucket ile Giriş Yap", "auth.login.bitbucket": "Bitbucket ile Giriş Yap",
"auth.login.clerk": "Clerk ile Giriş Yap",
"auth.login.discord": "Discord ile Giriş Yap", "auth.login.discord": "Discord ile Giriş Yap",
"auth.login.github": "GitHub ile Giriş Yap", "auth.login.github": "GitHub ile Giriş Yap",
"auth.login.gitlab": "GitLab ile Giriş Yap", "auth.login.gitlab": "GitLab ile Giriş Yap",

View File

@@ -2,6 +2,7 @@
"auth.login": "Đăng Nhập", "auth.login": "Đăng Nhập",
"auth.login.azure": "Đăng Nhập Bằng Microsoft", "auth.login.azure": "Đăng Nhập Bằng Microsoft",
"auth.login.bitbucket": "Đăng Nhập Bằng Bitbucket", "auth.login.bitbucket": "Đăng Nhập Bằng Bitbucket",
"auth.login.clerk": "Đăng Nhập Bằng Clerk",
"auth.login.discord": "Đăng Nhập Bằng Discord", "auth.login.discord": "Đăng Nhập Bằng Discord",
"auth.login.github": "Đăng Nhập Bằng GitHub", "auth.login.github": "Đăng Nhập Bằng GitHub",
"auth.login.gitlab": "Đăng Nhập Bằng Gitlab", "auth.login.gitlab": "Đăng Nhập Bằng Gitlab",

View File

@@ -2,6 +2,7 @@
"auth.login": "登录", "auth.login": "登录",
"auth.login.azure": "使用 Microsoft 登录", "auth.login.azure": "使用 Microsoft 登录",
"auth.login.bitbucket": "使用 Bitbucket 登录", "auth.login.bitbucket": "使用 Bitbucket 登录",
"auth.login.clerk": "使用 Clerk 登录",
"auth.login.discord": "使用 Discord 登录", "auth.login.discord": "使用 Discord 登录",
"auth.login.github": "使用 GitHub 登录", "auth.login.github": "使用 GitHub 登录",
"auth.login.gitlab": "使用 Gitlab 登录", "auth.login.gitlab": "使用 Gitlab 登录",

View File

@@ -2,6 +2,7 @@
"auth.login": "登入", "auth.login": "登入",
"auth.login.azure": "使用 Microsoft 登入", "auth.login.azure": "使用 Microsoft 登入",
"auth.login.bitbucket": "使用 Bitbucket 登入", "auth.login.bitbucket": "使用 Bitbucket 登入",
"auth.login.clerk": "使用 Clerk 登入",
"auth.login.discord": "使用 Discord 登入", "auth.login.discord": "使用 Discord 登入",
"auth.login.github": "使用 GitHub 登入", "auth.login.github": "使用 GitHub 登入",
"auth.login.gitlab": "使用 Gitlab 登入", "auth.login.gitlab": "使用 Gitlab 登入",

View File

@@ -37,7 +37,7 @@
helper="Optional parameter that supplies a hosted domain (HD) to Google, which<br>triggers a login hint to be displayed on the OAuth screen with this domain.<br><br><a class='underline dark:text-warning text-coollabs' href='https://developers.google.com/identity/openid-connect/openid-connect#hd-param' target='_blank'>Google Documentation</a>" helper="Optional parameter that supplies a hosted domain (HD) to Google, which<br>triggers a login hint to be displayed on the OAuth screen with this domain.<br><br><a class='underline dark:text-warning text-coollabs' href='https://developers.google.com/identity/openid-connect/openid-connect#hd-param' target='_blank'>Google Documentation</a>"
label="Tenant" /> label="Tenant" />
@endif @endif
@if ($oauth_setting->provider == 'authentik') @if ($oauth_setting->provider == 'authentik' || $oauth_setting->provider == 'clerk')
<x-forms.input id="oauth_settings_map.{{ $oauth_setting->provider }}.base_url" <x-forms.input id="oauth_settings_map.{{ $oauth_setting->provider }}.base_url"
label="Base URL" /> label="Base URL" />
@endif @endif