IdentityServer4 Duplicate Scopes - PullRequest
       15

IdentityServer4 Duplicate Scopes

0 голосов
/ 09 мая 2018

У меня есть веб-сервис REST, в котором мы должны развернуть n-количество клиентов. То же приложение развернуто, только с разной конфигурацией. У нас есть веб-интерфейс веб-интерфейса, который общается с этими экземплярами веб-сервиса REST. Пользователь авторизуется с помощью экземпляра IdentityServer4, использует интерфейс, который обращается к экземплярам серверного веб-сервиса и передает ему токен.

Мне нужно предотвратить использование полученного токена, который предоставляет доступ к webservice-X для доступа к webservice-Y. В идеале я бы определил ApiResource для каждого из развернутых клиентов с одинаковыми областями действия. При попытке аутентификации я получаю следующее сообщение об ошибке:

Найдены повторяющиеся области API. Это неверная конфигурация. Используйте разные имена для областей API. Найдены области применения: PaymentApi, DocumentApi

Есть ли способ отключить эту проверку? Есть ли другой способ настроить все для достижения этой цели?

Часть моей конфигурации:

            new ApiResource
            {
                Name = "WebService-X",
                DisplayName = "WebService-X",
                Description = "Client Api residing on customer-X network",
                Enabled = true,
                Scopes = new List<Scope>()
                {
                    new Scope()
                    {
                        Name = "PaymentApi",
                        DisplayName = "PaymentApi",
                        ShowInDiscoveryDocument = true,
                    },
                    new Scope()
                    {
                        Name = "DocumentApi",
                        DisplayName = "DocumentApi",
                        ShowInDiscoveryDocument = true,
                    }
                },
                ApiSecrets = new List<Secret>
                {
                    new Secret("fdzxGSDFHY)GSFD*U)DIS:LGJSLKFDJGG".Sha256())
                },
            },
            new ApiResource
            {
                Name = "WebService-Y",
                DisplayName = "WebService-Y",
                Description = "Client Api residing on customer-Y network",
                Enabled = true,
                Scopes = new List<Scope>()
                {
                    new Scope()
                    {
                        Name = "PaymentApi",
                        DisplayName = "PaymentApi",
                        ShowInDiscoveryDocument = true,
                    },
                    new Scope()
                    {
                        Name = "DocumentApi",
                        DisplayName = "DocumentApi",
                        ShowInDiscoveryDocument = true,
                    }
                },
                ApiSecrets = new List<Secret>
                {
                    new Secret("fdzxGSDFHY)GSDFS$#%#$LKFDJGG".Sha256())
                },
            },

Я хочу избежать чего-то подобного, потому что это плохо масштабируется:

                new ApiResource
                {
                    Name = "WebService-X",
                    DisplayName = "WebService-X",
                    Description = "Client Api residing on customer-X network",
                    Enabled = true,
                    Scopes = new List<Scope>()
                    {
                        new Scope()
                        {
                            Name = "PaymentApi-X",
                            DisplayName = "PaymentApi-X",
                            ShowInDiscoveryDocument = true,
                        },
                        new Scope()
                        {
                            Name = "DocumentApi-X",
                            DisplayName = "DocumentApi-X",
                            ShowInDiscoveryDocument = true,
                        }
                    },
                    ApiSecrets = new List<Secret>
                    {
                        new Secret("fdzxGSDFHY)GSFD*U)DIS:LGJSLKFDJGG".Sha256())
                    },
                },
                new ApiResource
                {
                    Name = "WebService-Y",
                    DisplayName = "WebService-Y",
                    Description = "Client Api residing on customer-Y network",
                    Enabled = true,
                    Scopes = new List<Scope>()
                    {
                        new Scope()
                        {
                            Name = "PaymentApi-Y",
                            DisplayName = "PaymentApi-Y",
                            ShowInDiscoveryDocument = true,
                        },
                        new Scope()
                        {
                            Name = "DocumentApi-Y",
                            DisplayName = "DocumentApi-Y",
                            ShowInDiscoveryDocument = true,
                        }
                    },
                    ApiSecrets = new List<Secret>
                    {
                        new Secret("fdzxGSDFHY)GSDFS$#%#$LKFDJGG".Sha256())
                    },
                },

1 Ответ

0 голосов
/ 18 мая 2018

Эта проверка выполняется с помощью метода расширения в IResourceStoreExtensions . Невозможно переопределить это поведение, так как предназначенный дизайн - это как минимум одна уникальная область API для каждого ресурса API.

В вашей конкретной ситуации вам придется настраивать области и ресурсы API для каждого арендатора, поскольку они являются отдельными ресурсами.

Предположительно, если у вас был централизованный ресурс, который использовал конечные точки ваших клиентов как вид инфраструктуры обслуживания, вы могли бы вместо этого указать своего предполагаемого арендатора как часть запроса и использовать утверждения области действия, чтобы определить, является ли запрос допустимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...