-
Notifications
You must be signed in to change notification settings - Fork 565
Proxy Configuration
This page covers how to configure AuthMe behind a Velocity or BungeeCord proxy. Read the choosing a setup section first — the steps differ depending on whether your proxy runs in online-mode or offline-mode.
The correct setup depends on two factors: which proxy software you use, and whether it runs in online-mode.
| Your proxy |
online-mode in proxy config |
What you need |
|---|---|---|
| Velocity | true |
Velocity — online-mode |
| Velocity | false |
Velocity — offline-mode |
| BungeeCord / Waterfall | online_mode: true |
BungeeCord — online-mode |
| BungeeCord / Waterfall | online_mode: false |
BungeeCord — offline-mode |
Note: The config key
Hooks.bungeecordin AuthMe'sconfig.ymlis the universal proxy hook flag. Despite the name, it applies to both BungeeCord and Velocity setups.
Use this when online-mode = true in velocity.toml. Velocity authenticates players with Mojang
directly and forwards the verified UUID to your backend servers. No extra proxy plugin is needed.
Download the jar matching your backend server platform from the
releases page and place it in the plugins/
folder of every backend server.
| Server software | Jar to use |
|---|---|
| Spigot 1.16 – 1.19 | AuthMe-*-Spigot-Legacy.jar |
| Spigot 1.20 – 1.21 | AuthMe-*-Spigot.jar |
| Paper 1.21+ | AuthMe-*-Paper.jar |
| Folia 1.21+ | AuthMe-*-Folia.jar |
server.properties — the backend must be in offline-mode so Velocity handles authentication:
online-mode=falsespigot.yml — when using Velocity modern forwarding, BungeeCord legacy mode must be off:
settings:
bungeecord: falseconfig/paper-global.yml (Paper 1.14+) — enable Velocity modern forwarding:
proxies:
velocity:
enabled: true
online-mode: true # must match your velocity.toml online-mode value
secret: 'YOUR_FORWARDING_SECRET' # copy from Velocity's forwarding.secret fileFor Paper 1.14 – 1.18.2 these settings are in
paper.ymlundersettings.velocity-support.enabled,settings.velocity-support.secret, andsettings.velocity-support.online-modeinstead.
plugins/AuthMe/config.yml — enable the proxy hook and optionally redirect players after login:
Hooks:
bungeecord: true
sendPlayerTo: 'lobby' # optional: BungeeCord server name to send players to after login
DataSource:
caching: false # must be false in multi-server setupsImportant:
Hooks.bungeecord: truealso requires the backend server to be in proxy mode. With Velocity modern forwarding,spigot.yml bungeecordstaysfalse, but Paper's ownproxies.velocity.enabled: truesatisfies AuthMe's proxy-mode check on Paper servers. On Spigot (non-Paper) with modern forwarding, use legacy forwarding instead (player-info-forwarding-mode = "legacy"invelocity.toml) and setspigot.yml bungeecord: true.
velocity.toml:
online-mode = true
player-info-forwarding-mode = "modern"
[servers]
auth = "127.0.0.1:25566"
lobby = "127.0.0.1:25567"
try = ["auth"] # route new connections to the auth server firstThe forwarding.secret file in your Velocity root directory contains the secret that must be
copied verbatim into paper-global.yml on every backend.
- Start all backend servers
- Start Velocity
Use this when online-mode = false in velocity.toml. AuthMe ships a dedicated authme-velocity
proxy plugin that handles authentication state synchronisation between the proxy and your backend
servers.
Same as above — pick the jar matching your platform.
Download authme-velocity-*.jar from the same
releases page and place it in your Velocity
server's plugins/ folder.
This generates the default config files on both the proxy and backend servers. Always refer to those generated files as the authoritative source for exact key names.
Open the generated config in plugins/authme-velocity/ on your Velocity server. The key settings
to adjust are:
# List the names of servers that have AuthMe installed.
# These must match the server names defined in velocity.toml.
authServers:
- auth
# Server to send players to after successful login.
toServerAfterLogin: lobby
# Shared secret used to verify messages between the proxy plugin and AuthMe on the backend.
# Must be identical to Hooks.proxySharedSecret in every backend's AuthMe config.yml.
proxySharedSecret: 'change_this_to_a_long_random_string'server.properties:
online-mode=falsespigot.yml — enable BungeeCord/proxy mode so AuthMe accepts the forwarded connection:
settings:
bungeecord: trueplugins/AuthMe/config.yml:
Hooks:
bungeecord: true
sendPlayerTo: '' # leave empty; the proxy plugin handles server switching
proxySharedSecret: 'change_this_to_a_long_random_string' # must match proxy plugin
DataSource:
caching: falseImportant:
proxySharedSecretmust be byte-for-byte identical on the proxy plugin and every backend server. A mismatch will silently prevent auto-login from working.
velocity.toml:
online-mode = false
player-info-forwarding-mode = "legacy" # use "bungeeguard" for added security on shared hosting
[servers]
auth = "127.0.0.1:25566"
lobby = "127.0.0.1:25567"
try = ["auth"]- Start all backend servers
- Start Velocity
Players connect → land on the auth server → log in or register → the proxy plugin forwards them
to
toServerAfterLoginautomatically.
Use this when online_mode: true in BungeeCord's config.yml. BungeeCord authenticates with
Mojang and forwards the verified UUID. No extra proxy plugin is needed.
Same platform table as above.
server.properties:
online-mode=falsespigot.yml:
settings:
bungeecord: trueplugins/AuthMe/config.yml:
Hooks:
bungeecord: true
sendPlayerTo: 'lobby' # optional
DataSource:
caching: falseconfig.yml (BungeeCord root):
online_mode: true
ip_forward: true
servers:
auth:
address: 127.0.0.1:25566
motd: '&1Auth server'
restricted: false
lobby:
address: 127.0.0.1:25567
motd: '&1Lobby'
restricted: false
listeners:
- priorities:
- auth # route new connections to the auth server first- Start all backend servers
- Start BungeeCord
Use this when online_mode: false in BungeeCord's config.yml. AuthMe ships a dedicated
authme-bungee proxy plugin for this setup.
Same platform table as above.
Download authme-bungee-*.jar from the
releases page and place it in your BungeeCord
server's plugins/ folder.
This generates the default config files. Refer to the generated config as the authoritative source for exact key names.
Open the generated config in plugins/authme-bungee/ on your BungeeCord server. The key settings
to adjust are:
# List the names of servers that have AuthMe installed.
# Must match the server names in BungeeCord's config.yml.
authServers:
- auth
# Server to send players to after successful login.
toServerAfterLogin: lobby
# Shared secret — must match Hooks.proxySharedSecret on every backend.
proxySharedSecret: 'change_this_to_a_long_random_string'server.properties:
online-mode=falsespigot.yml:
settings:
bungeecord: trueplugins/AuthMe/config.yml:
Hooks:
bungeecord: true
sendPlayerTo: ''
proxySharedSecret: 'change_this_to_a_long_random_string' # must match proxy plugin
DataSource:
caching: falseconfig.yml:
online_mode: false
ip_forward: true
servers:
auth:
address: 127.0.0.1:25566
motd: '&1Auth server'
restricted: false
lobby:
address: 127.0.0.1:25567
motd: '&1Lobby'
restricted: false
listeners:
- priorities:
- authSecurity note: Running BungeeCord in offline-mode without firewalling exposes your backend servers to direct connections that bypass authentication entirely. Firewall your backend ports so only the proxy IP can reach them. On shared hosting where firewalling isn't possible, use
player-info-forwarding-mode = "bungeeguard"in Velocity, or install BungeeGuard for BungeeCord.
- Start all backend servers
- Start BungeeCord
These settings in plugins/AuthMe/config.yml are relevant to every proxy setup:
Hooks:
# Required for every proxy setup, including Velocity. Default: false.
bungeecord: true
# BungeeCord server name to send players to after login. Leave empty to disable.
# Do not set this when using the authme-velocity or authme-bungee proxy plugin —
# those plugins handle server switching themselves via toServerAfterLogin.
sendPlayerTo: ''
# Shared secret for verifying perform.login messages from the AuthMe proxy plugin.
# Required only for offline-mode setups using authme-velocity or authme-bungee.
# Must match the proxySharedSecret value in the proxy plugin config.
proxySharedSecret: ''
DataSource:
# Disable the database cache in any multi-server or proxy environment. Default: true.
caching: falseHooks.bungeecord is AuthMe's single unified flag for any proxy type. The name is a legacy
holdover — it enables proxy-mode behaviour (trusted UUID forwarding, plugin messaging) regardless
of whether your proxy is BungeeCord or Velocity.
AuthMe validates on startup that the backend server is actually running in a proxy-compatible mode:
-
Spigot + legacy forwarding:
spigot.yml bungeecord: true→ check passes. -
Paper + Velocity modern forwarding:
proxies.velocity.enabled: trueinpaper-global.yml→ check passes even thoughspigot.yml bungeecordremainsfalse. - Neither configured: AuthMe logs a warning and auto-disables the hook to prevent untrusted payload attacks.
[AuthMe] BungeeCord hook will be automatically disabled!
Your backend is not in proxy mode. For Velocity modern forwarding confirm
proxies.velocity.enabled: true is set in config/paper-global.yml. For legacy forwarding
confirm settings.bungeecord: true is set in spigot.yml. See the relevant setup section above.
Players can move and execute commands before logging in
AuthMe's movement and command restrictions are enforced on the backend server. Confirm
Hooks.bungeecord: true is set and that the backend proxy-mode check passes (see above).
Players are not forwarded to lobby after login
- For online-mode setups (no proxy plugin): set
Hooks.sendPlayerTo: 'lobby'inconfig.yml. - For offline-mode setups (with proxy plugin): set
toServerAfterLogin: lobbyin the proxy plugin config and leaveHooks.sendPlayerToempty. Setting both simultaneously causes a conflict. Auto-login does not work across servers
DataSource.caching must be false on every backend. With caching on, each server maintains
its own local login state and cannot observe logins that happened on a different server.
proxySharedSecret mismatch
The secret in the proxy plugin config and in every backend config.yml must be identical,
including case and whitespace. Regenerate a fresh random string, paste it into both locations,
and restart all affected servers.
Players have to log in again when switching to a non-auth server
The proxy plugin (authme-velocity or authme-bungee) must be running on the proxy. If only
the backend plugin is installed without the proxy-side plugin, login state is not forwarded and
players will be prompted again on every server switch.
See also: Releases