Auth Providers (How-To)¶
The Security REST service lets administrators list, create, update, delete, enable/disable, and re-order authentication-provider configurations.
Permissions: all endpoints require an authenticated user with the
ROLE_ADMINISTRATOR
role.
Representation¶
XML uses the concrete config class name as the element name, e.g.:
<org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig> … </org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig>
JSON requests/responses are plain objects (example below). For requests, the controller also accepts the envelope
{ "authprovider": { … } }
.
General rules¶
Create (POST):
className
is required.Update (PUT): - Path
{providerName}
must match payloadname
. -className
cannot change; omit it to keep the current value. -id
may be omitted; the existing value is preserved.Order & enable/disable: - The active list in the security config (
<authproviderNames>
) defines both order and which providers are enabled. - Names present = enabled (in that order). Names absent = disabled (kept on disk).
Base URL¶
All examples assume:
http://localhost:8080/geoserver/rest
List providers — GET /security/authproviders
¶
Returns providers in the current active order.
curl (XML)
- curl -u admin:••••
-H “Accept: application/xml” http://localhost:8080/geoserver/rest/security/authproviders
Response 200 (XML)
<authproviders>
<org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig>
<id>52857278:13c7ffd66a8:-7ff0</id>
<name>default</name>
<className>org.geoserver.security.auth.UsernamePasswordAuthenticationProvider</className>
<userGroupServiceName>default</userGroupServiceName>
</org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig>
</authproviders>
curl (JSON)
- curl -u admin:••••
-H “Accept: application/json” http://localhost:8080/geoserver/rest/security/authproviders
Response 200 (JSON)
{
"authproviders": [
{
"id": "52857278:13c7ffd66a8:-7ff0",
"name": "default",
"className": "org.geoserver.security.auth.UsernamePasswordAuthenticationProvider",
"userGroupServiceName": "default"
}
]
}
Get a provider — GET /security/authproviders/{providerName}
¶
curl (XML)
- curl -u admin:••••
-H “Accept: application/xml” http://localhost:8080/geoserver/rest/security/authproviders/default
Response 200 (XML)
<org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig>
<id>52857278:13c7ffd66a8:-7ff0</id>
<name>default</name>
<className>org.geoserver.security.auth.UsernamePasswordAuthenticationProvider</className>
<userGroupServiceName>default</userGroupServiceName>
</org.geoserver.security.config.UsernamePasswordAuthenticationProviderConfig>
Response 200 (JSON)
{
"id": "52857278:13c7ffd66a8:-7ff0",
"name": "default",
"className": "org.geoserver.security.auth.UsernamePasswordAuthenticationProvider",
"userGroupServiceName": "default"
}
Status: 200
, 403
, 404
, 500
Create a provider — POST /security/authproviders
¶
Optional ?position=N
(0-based) inserts the new provider at that index; omit to append.
curl (XML body)
curl -u admin:•••• \
-X POST \
-H "Content-Type: application/xml" \
-H "Accept: application/xml" \
--data-binary @- \
http://localhost:8080/geoserver/rest/security/authproviders <<'EOF'
<org.geoserver.security.config.LdapAuthenticationProviderConfig>
<name>corporateLdap</name>
<className>org.geoserver.security.auth.LdapAuthenticationProvider</className>
<userGroupServiceName>ldapUsers</userGroupServiceName>
</org.geoserver.security.config.LdapAuthenticationProviderConfig>
EOF
curl (JSON body — envelope)
curl -u admin:•••• \
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data '{"authprovider":{"name":"corporateLdap","className":"org.geoserver.security.auth.LdapAuthenticationProvider","userGroupServiceName":"ldapUsers"}}' \
http://localhost:8080/geoserver/rest/security/authproviders
Response 201
Location: /geoserver/rest/security/authproviders/corporateLdap
Body echoes the created provider with a server-assigned id
.
Status: 201
, 400
(validation/duplicate/reserved name/position), 403
, 500
Update a provider — PUT /security/authproviders/{providerName}
¶
You may also move a provider by adding ?position=N
.
Rules recap:
path
{providerName}
must equal payloadname
className
cannot change (omit to keep)id
may be omitted (kept as is)
curl (XML body)
curl -u admin:•••• \
-X PUT \
-H "Content-Type: application/xml" \
-H "Accept: application/xml" \
--data-binary @- \
"http://localhost:8080/geoserver/rest/security/authproviders/corporateLdap?position=0" <<'EOF'
<org.geoserver.security.config.LdapAuthenticationProviderConfig>
<name>corporateLdap</name>
<className>org.geoserver.security.auth.LdapAuthenticationProvider</className>
<userGroupServiceName>ldapUsers</userGroupServiceName>
</org.geoserver.security.config.LdapAuthenticationProviderConfig>
EOF
curl (JSON)
curl -u admin:•••• \
-X PUT \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data '{"name":"corporateLdap","className":"org.geoserver.security.auth.LdapAuthenticationProvider","userGroupServiceName":"ldapUsers"}' \
"http://localhost:8080/geoserver/rest/security/authproviders/corporateLdap?position=0"
Response 200 returns the updated provider.
Status codes
200
, 400
(name mismatch/class change/position), 403
, 404
, 500
Delete a provider — DELETE /security/authproviders/{providerName}
¶
Removes the provider and drops it from the active order.
curl
curl -u admin:•••• \
-X DELETE \
http://localhost:8080/geoserver/rest/security/authproviders/corporateLdap
Status codes
200
, 403
, 404
(not found), 410
(already removed), 500
Re-order / enable / disable — PUT /security/authproviders/order
¶
Send the complete list of provider names in the desired order:
providers listed = enabled (in that order)
providers omitted = disabled (remain configured on disk)
Only PUT is allowed.
curl (JSON)
curl -u admin:•••• \
-X PUT \
-H "Content-Type: application/json" \
--data '{"order":["corporateLdap","default"]}' \
http://localhost:8080/geoserver/rest/security/authproviders/order
curl (XML)
curl -u admin:•••• \
-X PUT \
-H "Content-Type: application/xml" \
--data-binary @- \
http://localhost:8080/geoserver/rest/security/authproviders/order <<'EOF'
<order>
<order>corporateLdap</order>
<order>default</order>
</order>
EOF
Status codes
200
, 400
(unknown name/empty list), 403
, 500
Error responses¶
All errors use a simple payload:
{ "status": 400, "message": "Missing 'className' in JSON payload" }
<ErrorResponse>
<status>400</status>
<message>Missing 'className' in JSON payload</message>
</ErrorResponse>
Operational notes¶
Writes are serialized to protect on-disk XML and the security manager state.
After POST, PUT, DELETE, and /order updates, the security configuration is reloaded automatically.
For POST/PUT, prefer to omit
id
; it is server-managed.