apache / apache/pulsar

[Bug] Multi-role authorization does not work properly on granting topic level permissions based on ordering of roles in token

Open
#22,343 1 comment 0 reactions 1 assignee Claimed by @Technoboy- View on GitHub
type/bug
Dominant language
Java
Stars
15.3k
Forks
3.8k
Avg merge
1d 14h
Merged PRs (30d)
160

Description

### Search before asking

- [X] I searched in the [issues](https://github.com/apache/pulsar/issues) and found nothing similar.

### Read release policy

- [X] I understand that unsupported versions don't get bug fixes. I will attempt to reproduce the issue on a supported version of Pulsar client and Pulsar broker.

### Version

Running on a UBI 9 base image, java version: openjdk 17.0.10, pulsar version: 3.1.2, 3.2.0, and 3.2.1.

### Minimal reproduce step

1. Enable a broker with multi-role authorization/JWT authentication.
2. Create token with multiple roles. Mine has these 2:
```
"roles": [
"Group_Test-admin",
"Group_Test-user"
]
```
3. Set the second of those roles associated with the created token as an admin role of the tenant or namespace
```
bash-5.1$ bin/pulsar-admin tenants update public -r Group_Test-user
```
4. Create a topic. I did it under the public/default namespace, but it doesn't matter.
```
bash-5.1$ bin/pulsar-admin topics create public/default/issue
```
5. Use the multi-role token (with the second as the only role with permission to access the tenant/namespace) to confirm that it has access:
Issue1

6. Attempt to permit access to a role on that topic. Will fail with `{"reason":"Don't have permission to administrate resources on this tenant"}` despite being able to successfully run other commands against that tenant/namespace:
Issue2

7. Switch admin role of tenant to first role in JWT:
```
bash-5.1$ bin/pulsar-admin tenants update public -r Group_Test-admin
```
8. Re-run access granting command:
Issue3

9. Verify the access granting succeeded when the first role of the JWT has access:
image

### What did you expect to see?

I expected that this operation should have succeeded when either of the roles in the JWT were permitted access to the tenant/namespace.

### What did you see instead?

To be able to successfully perform the topic role permission granting action, the permitted role MUST be the first in the claim.

### Anything else?

Like I said before, I have tried this on multiple supported versions and in many different clusters/use cases. I find that this issue is not only on the POST but also the GET and presumably the DELETE. I have spent quite a while trying to find any other endpoints that are afflicted by this same issue, but my testing has only yielded this one. Any help is appreciated.

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.