Variable substitution in messaging policies
You can use variable substitution in messaging policies to avoid configuring large numbers of messaging policies. You can set up a topic policy or queue policy so that the topic or queue parameter in the policy includes a user ID, group ID, client ID, or client certificate common name variable. The user ID, group ID, client ID, or common name is matched to the topic string or queue name, and access is granted to that topic tree or queue only.
${UserID}
for the user ID.${GroupID}
for the group ID.${ClientID}
for the client ID. You cannot use${ClientID}
in a subscription messaging policy.${CommonName}
for the client certificate common name.
The topic parameter or queue parameter can contain multiple variables, but only one instance of each variable. For example, EXAMPLE/${ClientID}/A/${UserID}
is valid, but EXAMPLE/${ClientID}/A/${ClientID}
is not valid. You can specify extra characters along with the variable, for example EXAMPLE/${UserID}
. However, if you use an unknown variable, the matching of the policy fails.
MOBILEAPP/ACCOUNT/ClientID
MOBILEAPP/ACCOUNT/ClientID/PRIVILEGE
MOBILEAPP/ACCOUNT/${ClientID}
, a malicious client can use a client ID that ends with /PRIVILEGE
, and can gain access to the administrator topics.Using the ${UserID}
variable
Name:SubscribeItemTracking,
Description:Topic policy for clients IDs with item tracking,
Clientid:*,
Topic:item/tracking/${UserID},
ActionList:Subscribe
Using this topic policy, all clients can subscribe to topic string item/tracking/
. However, each user can see only their items, as the ${UserID}
is replaced by the user ID in the topic string. For example, there are two users, user_a
and user_b
. When user_a
accesses the topic, they can subscribe only to the topic item/tracking/user_a
. When user_b
accesses the topic, they can subscribe only to the topic item/tracking/user_b
. user_b
cannot subscribe to the topic item/tracking/user_a
.
Using the ${GroupID}
variable
Name:PublishbyGeographicRegion,
Description:Topic policy for group IDs by geographic region,
Clientid:*,
Topic:drivers/USA/${GroupID}/*,
Action:Publish
Using this topic policy, a message can be published to topic string drivers/USA
. Only users in a specific group can receive messages to which they are authorized, as the ${GroupID}
is replaced by a specific group ID in the topic string. For example, there are two users, user_a
and user_b
. user_a
is in the group Los Angeles
. user_b
is in the group San Francisco
. user_a
is authorized to receive only messages that are published to the topic drivers/USA/Los Angeles
. user_b
is authorized to receive only messages that are published to the topic drivers/USA/San Francisco
. user_b
cannot receive messages that are published to the topic drivers/USA/Los Angeles
. user_c
is in the group Los Angeles
and the group San Francisco
, so user_c
is authorized to receive messages that are published to the topic drivers/USA/Los Angeles
and the topic drivers/USA/San Francisco
.
When you
use the ${GroupID}
variable but have different users
with the same user ID in different groups with the same group ID,
consider using unique group IDs. Unique group IDs help to ensure that
only those users that you intend to have the authority to publish
or subscribe to a topic can do so. For example, there are two users
with the same user ID, Truck1
. One user drives during
the day and the other user drives during the night. They are both
members of different groups which are both called Los Angeles
;
these groups called Los Angeles
are nested as members
of other groups. The driver who drives during the day has user ID Truck1
in
group Los Angeles
which is nested within group Daytime
.
The driver who drives during the night has user ID Truck1
in
group Los Angeles
which is nested within group Nighttime
.
If you specify the ${GroupID}
variable, when it is
replaced by the specific group ID in the topic string, both users
receive messages that are published to the topic drivers/USA/Los
Angeles
. It might not be your intention for both of these
users to receive these messages; you might only require one of these
users to receive these messages and for the other user to receive
messages from a different topic string. Consider using unique group
names in this situation. You might consider replacing the group ID Los
Angeles
with group IDs similar to Los Angeles Day
and Los
Angeles Night
.
A user can be a member of a maximum of 200 groups.