Моя компания должна вступить в федерацию с несколькими внешними поставщиками идентификационной информации (используя стандартные отраслевые решения, такие как AD FS, F5 и т. Д.), Которые выдают групповые заявки.
Когда у пользователя несколько групп, эти IdP выдают ответ с утверждением в следующем формате:
"groups": ["Domain Users", "US Users", "Administrators"]
Но когда у пользователя всего одна группа:
"groups": "Domain Users"
Вот ClaimType b2cGroups, как определено в TrustFrameworkExtensions:
<ClaimType Id="b2cGroups">
<DisplayName>Groups</DisplayName>
<DataType>stringCollection</DataType>
<AdminHelpText>User's groups.</AdminHelpText>
</ClaimType>
И OutputClaim во внешнем техническом профиле IdP:
<OutputClaim ClaimTypeReferenceId="b2cGroups" PartnerClaimType="groups" />
В текущей конфигурации B2C выдает фатальное исключение, когда у пользователя есть только одна группа:
The data type 'String' of the claim with id 'groups' does not match the DataType 'StringCollection' of ClaimType with id 'b2cGroups' specified in the policy.
Я могу изменить определение утверждения с stringCollection на string:
<ClaimType Id="b2cGroups">
<DisplayName>Groups</DisplayName>
<DataType>string</DataType>
<AdminHelpText>User's groups.</AdminHelpText>
</ClaimType>
Но теперь, когда у пользователя несколько групп:
The data type 'StringCollection' of the claim with id 'groups' does not match the DataType 'String' of ClaimType with id 'b2cGroups' specified in the policy.
Исключение происходит во время выполнения самого технического профиля OIDC или SAML2, поэтому я не могу использовать преобразование утверждений для управления данными. Кажется, что B2C не снисходителен к этой потенциальной несогласованности в типах данных, что верно в теории, но на практике основные решения для федеративной идентификации (такие как AD FS, который также является продуктом MS) не придерживаются этого стандарта.
Это стало серьезной проблемой, которая, если ее не решить, заставит нас разорвать существующую инфраструктуру B2C и перейти на другое решение CIAM. Есть ли исправление или хитрость, которые я могу применить для устранения этой проблемы?