2017-02-14 23:51:47 +08:00
|
|
|
|
# RabbitMQ HTTP Authn/Authz Backend Examples
|
|
|
|
|
|
2017-02-16 21:04:27 +08:00
|
|
|
|
## Python Example
|
2017-01-12 20:06:32 +08:00
|
|
|
|
|
|
|
|
|
`rabbitmq_auth_backend_django` is a very minimalistic [Django](https://www.djangoproject.com/) 1.10+ application
|
|
|
|
|
that rabbitmq-auth-backend-http can authenticate against. It's really
|
|
|
|
|
not designed to be anything other than an example.
|
|
|
|
|
|
2017-02-14 23:51:47 +08:00
|
|
|
|
### Running the Example
|
2017-01-12 20:06:32 +08:00
|
|
|
|
|
|
|
|
|
Run `start.sh` to launch it after [installing Django](https://docs.djangoproject.com/en/1.10/topics/install/). You may need to
|
|
|
|
|
hack `start.sh` if you are not running Debian or Ubuntu.
|
|
|
|
|
|
|
|
|
|
The app will use a local SQLite database. It uses the standard
|
|
|
|
|
Django authentication database. All users get access to all vhosts and
|
|
|
|
|
resources.
|
|
|
|
|
|
2017-02-14 23:51:47 +08:00
|
|
|
|
### HTTP Endpoint Examples
|
2017-01-12 20:06:32 +08:00
|
|
|
|
|
|
|
|
|
If you're not familiar with Django, urls.py and auth/views.py may be
|
|
|
|
|
most illuminating.
|
2017-02-14 23:51:47 +08:00
|
|
|
|
|
2017-02-16 21:04:27 +08:00
|
|
|
|
|
|
|
|
|
## Spring Boot Example
|
2017-02-14 23:51:47 +08:00
|
|
|
|
|
|
|
|
|
`rabbitmq_auth_backend_spring_boot` is a simple [Spring Boot](https://projects.spring.io/spring-boot/)
|
|
|
|
|
application that rabbitmq-auth-backend-http can authenticate against. It's really
|
|
|
|
|
not designed to be anything other than an example.
|
|
|
|
|
|
|
|
|
|
## Running the Example
|
|
|
|
|
|
|
|
|
|
Import the example as a Maven project in your favorite IDE or run it directly from the command line:
|
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
``` shell
|
|
|
|
|
mvn spring-boot:run
|
|
|
|
|
```
|
|
|
|
|
|
2017-02-14 23:51:47 +08:00
|
|
|
|
The application listens on the 8080 port.
|
|
|
|
|
|
|
|
|
|
### HTTP Endpoint Examples
|
|
|
|
|
|
|
|
|
|
Have a look at the `AuthBackendHttpController`. There's only one user: `guest`,
|
|
|
|
|
with the `guest` password. This implementation also checks the
|
2018-04-01 04:51:21 +08:00
|
|
|
|
routing key starts with an `a` when publishing to a topic exchange
|
2017-02-16 21:04:27 +08:00
|
|
|
|
or consuming from a topic. (an example of [topic authorisation](http://next.rabbitmq.com/access-control.html#topic-authorisation)).
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
## ASP.NET Web API Example
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
`rabbitmq_auth_backend_webapi_dotnet` is a very minimalistic ASP.NET Web API application
|
|
|
|
|
the plugin can authenticate against. It's really
|
|
|
|
|
**not designed to be anything other than an example**.
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
|
|
|
|
### Running the Example
|
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
Open the WebApiHttpAuthService.csproj in Visual Studio 2017, More details about prerequisites can be found below.
|
|
|
|
|
|
|
|
|
|
First, configure RabbitMQ [authn and authz backend](http://www.rabbitmq.com/access-control.html) to use this
|
|
|
|
|
plugin using the below config example.
|
|
|
|
|
|
|
|
|
|
Then Build the solution and run it from Visual Studio.
|
|
|
|
|
`Controllers/AuthController.cs` contains the authentication and authorization logic.
|
|
|
|
|
By default All users get access to all vhosts and resources.
|
|
|
|
|
User "authuser" will be denied access.
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
|
|
|
|
### HTTP Endpoint Examples
|
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
Have a look at `AuthController`.
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
### Development Environment
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
This example was developed using
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
* .NET Framework 4.5
|
|
|
|
|
* Visual Studio 2017
|
|
|
|
|
* Windows 10 and IIS v10.0
|
2018-04-01 04:51:21 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
It is possible to build and run service from Visual Studio browse the endpoint without using IIS.
|
|
|
|
|
Port number may vary but will likely be `62190`.
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
When the example is hosted on IIS, port 80 will be used by default.
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2018-07-29 20:12:43 +08:00
|
|
|
|
## ASP.NET Core 2.1 Example
|
|
|
|
|
|
|
|
|
|
`rabbitmq_auth_backend_webapi_dotnetcore` is version of `rabbitmq_auth_backend_webapi_dotnet` designed for ASP.NET Core 2.1. It uses
|
|
|
|
|
same concepts as parent project, but it also adds some static typing for requests and responses.
|
|
|
|
|
|
|
|
|
|
### Running the Example
|
|
|
|
|
|
|
|
|
|
Open the WebApiHttpAuthService.sln in Visual Studio 2017.
|
|
|
|
|
|
|
|
|
|
First, configure RabbitMQ [authn and authz backend](http://www.rabbitmq.com/access-control.html) to use this
|
|
|
|
|
plugin using the below config example.
|
|
|
|
|
|
|
|
|
|
Then Build the solution and run it from Visual Studio.
|
|
|
|
|
`Controllers/AuthController.cs` contains the authentication and authorization logic.
|
|
|
|
|
By default All users get access to all vhosts and resources.
|
|
|
|
|
User "authuser" will be denied access.
|
|
|
|
|
|
|
|
|
|
### HTTP Endpoint Examples
|
|
|
|
|
|
|
|
|
|
Have a look at `AuthController`.
|
|
|
|
|
|
|
|
|
|
### Development Environment
|
|
|
|
|
|
|
|
|
|
This example was developed using
|
|
|
|
|
|
|
|
|
|
* ASP.NET Core 2.1
|
|
|
|
|
* Visual Studio 2017 (Visual Studio Code)
|
|
|
|
|
* Windows 10
|
|
|
|
|
|
|
|
|
|
It is possible to build and run service from Visual Studio using IIS or from Visual Studio or Visual Studio Code using cross-platform server Kestrel.
|
|
|
|
|
|
2018-03-31 16:47:51 +08:00
|
|
|
|
## PHP Boot Example
|
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
`rabbitmq_auth_backend_php` is a minimalistic PHP application that this plugin can authenticate against.
|
2018-03-31 16:47:51 +08:00
|
|
|
|
It's really not designed to be anything other than an example.
|
|
|
|
|
|
|
|
|
|
### Running the Example
|
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
The example requires PHP >= 5.4 and [Composer](https://getcomposer.org/).
|
2018-03-31 16:47:51 +08:00
|
|
|
|
|
|
|
|
|
The `rabbitmq-auth-backend-http-php` library depend on `symfony/security` and `symfony/http-foundation` components.
|
|
|
|
|
Go to the `rabbitmq_auth_backend_php` folder and run `composer install`.
|
|
|
|
|
|
|
|
|
|
```bash
|
2018-04-01 04:51:21 +08:00
|
|
|
|
cd rabbitmq_auth_backend_php/
|
|
|
|
|
composer install
|
2018-03-31 16:47:51 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Now you can run the PHP 5.4 server (server at http://127.0.0.1:8080)
|
|
|
|
|
|
|
|
|
|
```
|
2018-04-01 04:51:21 +08:00
|
|
|
|
composer start
|
2018-03-31 16:47:51 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Ensure the log file is writable `rabbitmq-auth-backend-http/examples/rabbitmq_auth_backend_php/var/log.log`.
|
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
Go to `http://localhost:8080/user.php?username=Anthony&password=anthony-password`, all work properly if you see `Allow administrator`
|
|
|
|
|
|
2018-03-31 16:47:51 +08:00
|
|
|
|
|
|
|
|
|
### HTTP Endpoint Examples
|
|
|
|
|
|
|
|
|
|
Have a look at the `bootstrap.php`. By default this example implement the same authorization rules than RabbitMQ.
|
|
|
|
|
|
|
|
|
|
Users list:
|
|
|
|
|
|
|
|
|
|
| User | password | is admin | Vhost | Configure regex | Write regex | Read regex | tags |
|
|
|
|
|
|--|--|--|--|--|--|--|--|
|
|
|
|
|
| Anthony | anthony-password | ✔️ | All | All | All | All | administrator |
|
|
|
|
|
| James | bond | | / | .* | .* | .* | management |
|
|
|
|
|
| Roger | rabbit | | | | | | monitoring |
|
|
|
|
|
| bunny | bugs | | | | | | policymaker |
|
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
### rabbitmq.config Example
|
|
|
|
|
|
2018-03-31 16:47:51 +08:00
|
|
|
|
ℹ️ Dont forget to set the proper url in your rabbit config file
|
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
Below is a [RabbitMQ config file](http://www.rabbitmq.com/configure.html) example to go with this
|
|
|
|
|
example:
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
the new style config format
|
|
|
|
|
|
|
|
|
|
``` ini
|
|
|
|
|
auth_backends.1 = internal
|
2018-03-31 16:47:51 +08:00
|
|
|
|
auth_backends.2 = http
|
2018-04-01 04:51:21 +08:00
|
|
|
|
auth_http.user_path = http://localhost:62190/auth/user.php
|
|
|
|
|
auth_http.vhost_path = http://localhost:62190/auth/vhost.php
|
|
|
|
|
auth_http.resource_path = http://localhost:62190/auth/resource.php
|
2018-03-31 16:47:51 +08:00
|
|
|
|
auth_http.topic_path = http://localhost:62190/auth/topic.php
|
|
|
|
|
```
|
|
|
|
|
|
2018-04-01 04:51:21 +08:00
|
|
|
|
Or in the classic format:
|
2018-03-31 16:47:51 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
``` erlang
|
|
|
|
|
[
|
|
|
|
|
{rabbit, [
|
|
|
|
|
{auth_backends, [rabbit_auth_backend_internal,rabbit_auth_backend_http]}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
rabbitmq_auth_backend_http,
|
|
|
|
|
[
|
|
|
|
|
{http_method, post},
|
|
|
|
|
{user_path, "http://localhost:62190/auth/user"},
|
|
|
|
|
{vhost_path, "http://localhost:62190/auth/vhost"},
|
|
|
|
|
{resource_path, "http://localhost:62190/auth/resource"},
|
|
|
|
|
{topic_path, "http://localhost:62190/auth/topic"}
|
|
|
|
|
]
|
|
|
|
|
}
|
2017-10-10 18:33:16 +08:00
|
|
|
|
].
|
2017-10-11 04:00:19 +08:00
|
|
|
|
```
|
2017-10-10 18:33:16 +08:00
|
|
|
|
|
2017-10-11 04:00:19 +08:00
|
|
|
|
See [RabbitMQ Access Control guide](http://www.rabbitmq.com/access-control.html) for more information.
|