|
||
---|---|---|
.. | ||
src | ||
test | ||
.gitignore | ||
.travis.yml | ||
Makefile | ||
README.md | ||
erlang.mk | ||
rabbitmq-components.mk |
README.md
RabbitMQ authorisation Backend for Cloud Foundry UAA
Allows to use access tokens provided by CF UAA to authorize in RabbitMQ.
Usage
First, enable the plugin. Then, configure access to UAA:
[{rabbitmq_auth_backend_uaa,
[{resource_server_id, <<"your-resource-server-id"}]},
{uaa_jwt, [
{signing_keys, #{
<<"key1">> => {map, #{<<"kty">> => <<"oct">>, <<"k">> => <<"dG9rZW5rZXk">>}},
<<"key2">> => {pem, <<"/path/to/public_key.pem">>},
<<"key3">> => {json, "{\"kid\":\"key3\",\"alg\":\"HMACSHA256\",\"value\":\"tokenkey\",\"kty\":\"MAC\",\"use\":\"sig\"}"}}}]}].
where
your-resource-server-id
is a resource server ID (e.g. 'rabbitmq')signing_keys
is a map of keys to sign JWT tokens (see UAA_JWT library for mode info)
To learn more about UAA/OAuth 2 clients, see UAA docs.
Then you can use access_tokens
acquired from UAA as username to authenticate in RabbitMQ.
Scopes
Scopes are translated into permission grants to RabbitMQ resources for the provided token.
The current scope format is <permission>:<vhost_pattern>/<name_pattern>[/<routing_key_pattern>]
where
<permission>
is an access permission (configure
,read
, orwrite
)<vhost_pattern>
is a wildcard pattern for vhosts, token has acces to.<name_pattern>
is a wildcard pattern for resource name<routing_key_pattern>
is an optional wildcard pattern for routing key in topic authorization
Wildcard patterns are strings with optional wildcard symbols *
that match
any sequence of characters.
Wildcard patterns match as wollowing:
*
matches any stringfoo*
matches any string starting with afoo
*foo
matches any string ending with afoo
foo*bar
matches any string starting with afoo
and ending with abar
There can be multiple wildcards in a pattern:
start*middle*end
*before*after*
If you want to use special characters like *
, %
, or /
in a wildacrd pattern,
the pattern must be URL-encoded.
See the [./test/wildcard_match_SUITE.erl](wildcard matching test suite) for more examples.
Authorization Workflow
Prerequisites
- There should be application client registered on UAA server.
- Client id and secret should be set in plugin env as
username
andpassword
- Client authorities should include
uaa.resource
- RabbitMQ auth_backends should include
rabbit_auth_backend_uaa
Authorization
- Client authorize with UAA, requesting
access_token
(using any grant type) - Token scope should contain RabbitMQ resource scopes (e.g.
configure:%2F/foo
means "configure queue 'foo' in vhost '/'") - Client passes token for a username when connecting to a RabbitMQ node