DuendeSoftware / Support

Support for Duende Software products
21 stars 0 forks source link

Redis clusters #1462

Closed ManelAtares closed 2 weeks ago

ManelAtares commented 3 weeks ago

Which version of Duende IdentityServer are you using?

6.3.10

Which version of .NET are you using?

6

Describe the bug

This is not a bug; it’s a question.

We are using Duende Identity Server to authenticate a mobile app, and everything is working smoothly. However, we have a question regarding the storage of refresh tokens.

We are using Redis as a distributed system for storing these tokens, and it is configured as a cluster. Currently, all keys are saved in the same slot because we are using {} as part of the key prefix:

identityServer .AddOperationalStore(options => { options.RedisConnectionMultiplexer = redisConnexion; options.KeyPrefix = $"{{ourPrefix}"; })

When we attempt to remove the braces, we receive the following exception:

"Multi-key operations must involve a single slot; keys can use hash tags to help this, i.e. {/users/12345}/account and {/users/12345}/contacts will always be in the same slot"

According the documentation this is the expected behavior since multi-key operations must use the same slot.

However, is there a way to take advantage of sharding by distributing groups of keys across different slots? Or is the only option to scale up a single machine vertically as our traffic grows?

Additional context

We have starter edition license

Thank you!

AndersAbel commented 3 weeks ago

This looks like you are using some kind of extension/add-on to use Redis for the operational store? We only supply an Entity Framework based implementation of the operational store. Are you using a Redis implementation directly or some package to make Entity Framework work with Redis?

AndersAbel commented 3 weeks ago

Also an additional note: You've written that you are running IdentityServer 6 on .NET 6. Those platforms go out of support in a week, so it is recommended to upgrade: https://duendesoftware.com/products/support

ManelAtares commented 2 weeks ago

Thanks, my mistake. I inherited the project and assumed it was part of the suite. It's an extension for using Redis Store. Thanks for the heads-up on the end of support.