The Proxy Auth Plugin helps developers/DevOps/admins easily implement authentication and authorization for WordPress by using a JWT (JSON Web Token) provided by a reverse proxy.
This could be employed to achieve SSO (OAUTH/OIDC and SAML) to a Cloud Identity Provider (e.g., Azure Active Directory, Okta, Auth0) by using an Identity-Aware Proxy, e.g., Datawiza Access Broker and Google IAP.
Note that the plugin requires a reverse proxy sitting in front of the WordPress site. The reverse proxy performs authentication, and passes the user name and role in a JWT to the plugin via a HTTP header called DW-TOKEN.
By using Datawiza Access Broker, you get a configuration-based no-code solution, following the detail instruction here.
If you decide to use your own reverse proxy, please follow the instructions below.
How it works
The plugin expects the JWT including user id and role as a HTTP header DW-TOKEN. For example, the payload of JWT may look like:
{
“role”: “administrator”,
“email”: “[email protected]”
}
Plugin config in WordPress
In Setting -> Datawiza Proxy Auth, you need to input a private secret which is used as a Cryptography Key. Such secret is shared between the plugin and the reverse proxy which is responsible for passing the JWT to the plugin. The Signing Algorithm for the JWT is HS256.
!!! NOTES !!!
DW-TOKEN header. The DW-TOKEN header should be generated by the reverse proxy only.Generate the JWT required by the plugin
If you are using openresty/lua-nginx-module, here is the code sample to generate the JWT required by the plugin:
jwt = require("resty.jwt")
local jwt_token = jwt:sign(
"jwt_secret",
{
header={typ="JWT", alg="HS256"},
payload={email="[email protected]", role="administrator"}
})
ngx.req.set_header('DW-TOKEN', jwt_token)
The jwt_secret above should be the same private secret input in Setting -> Datawiza Proxy Auth. The role in payload is optional. If it’s not specified, the default role is subscriber. For more details about lua-resty-jwt, you can visit here.