Я использую настраиваемую политику B2C для входа пользователей. Можно ли ограничить пользователей, чтобы они могли входить в систему только с указанного IP-адреса (или диапазона)?
Как ограничить вход в систему указанным диапазоном IP-адресов с помощью настраиваемой политики B2C
Ответы (3)
Вы также можете создать преобразование утверждений, которое проверяет, является ли IP-адрес клиента доверенным, следующим образом.
- Создайте один тип утверждения, например clientIP, с типом string, который представляет IP-адрес клиента:
<ClaimType Id="clientIP">
<DisplayName>Client IP Address</DisplayName>
<DataType>string</DataType>
</ClaimType>
И еще один тип утверждения, такой как isTrustedIP, типа boolean, который указывает, является ли IP-адрес клиента надежным IP-адресом или нет.
<ClaimType Id="isTrustedIP">
<DisplayName>Is Trusted IP Address</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
- Создайте преобразование утверждений, например SetIsTrustedIPClaim, типа SetClaimsIfRegexMatch, который проверяет, соответствует ли IP-адрес клиента надежному IP-адресу (например, 216.3.128.12 или любое регулярное выражение для IP-адреса или диапазона) или нет, и в результате устанавливает для утверждения isTrustedIP значение
true
илиfalse
:
<ClaimsTransformation Id="SetIsTrustedIPClaim" TransformationMethod="SetClaimsIfRegexMatch">
<InputClaims>
<InputClaim ClaimTypeReferenceId="clientIP" TransformationClaimType="claimToMatch" />
</InputClaims>
<InputParameters>
<InputParameter Id="matchTo" DataType="string" Value="^216\.3\.128\.12$" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isTrustedIP" TransformationClaimType="regexCompareResultClaim" />
</OutputClaims>
</ClaimsTransformation>
- Создайте технический профиль для преобразования требований., чтобы преобразование утверждений можно было вызвать на этапе оркестрации:
<ClaimsProvider>
<DisplayName>Claims Transformation</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="ClaimsTransformation-SetIsTrustedIPClaim">
<DisplayName>Set Is Trusted IP Claims Transformation</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="clientIP" DefaultValue="{Context:IPAddress}" AlwaysUseDefaultValue="true" />
</OutputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isTrustedIP" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="SetIsTrustedIPClaim" />
</OutputClaimsTransformations>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
- Вызов технического профиля преобразования утверждений на этапе оркестрации:
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="ClaimsTransformation-SetIsTrustedIPClaim" TechnicalProfileReferenceId="ClaimsTransformation-SetIsTrustedIPClaim" />
</ClaimsExchanges>
</OrchestrationStep>
Следующие ниже шаги оркестрации позволяют разрешить или запретить доступ в зависимости от того, установлено ли для утверждения isTrustedIP значение true
или false
.
Вы можете создать страницу с самооценкой, которая действует как страница блокировки:
<TechnicalProfile Id="SelfAsserted-BlockUser">
<DisplayName>Block page</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
<Metadata>
<Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
<Item Key="setting.showContinueButton">false</Item>
<Item Key="setting.showCancelButton">false</Item>
</Metadata>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="CreateError"/>
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="UserMessageDenied"/>
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="UserMessageDenied" Required="true"/>
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/>
</TechnicalProfile>
Создайте сообщение об ошибке для отображения
<ClaimsTransformation Id="CreateError" TransformationMethod="CreateStringClaim">
<InputParameters>
<InputParameter Id="value" DataType="string" Value="Your IP is blocked." />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="UserMessageDenied" TransformationClaimType="createdClaim" />
</OutputClaims>
</ClaimsTransformation>
Затем вызовите его из userJourney, чтобы оценить isTrustedIP
, который затем вызывает страницу блокировки:
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>isTrustedIP</Value>
<Value>True</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="BlockUser" TechnicalProfileReferenceId="Selfasserted-Blockuser" />
</ClaimsExchanges>
</OrchestrationStep>
В настоящее время в Azure AD B2C такой функции нет. Вы можете оставить отзыв на форуме Microsoft Azure.
Вы можете попробовать реализовать это самостоятельно, см. Идею ниже.
Вы можете вызвать REST API и передать ему IP-адрес. IP-адрес можно определить с помощью средства разрешения утверждений. Если это один IP-адрес, вы можете выполнить преобразование утверждения в политике, чтобы проверить, совпадает ли IP-адрес пользователя. В противном случае, если ему нужно проверить IP-адрес пользователя в диапазоне IP-адресов, вам необходимо выполнить эту логику в REST API.
Аналогичный подход к этому:
https://github.com/azure-ad-b2c/samples/tree/master/policies/relying-party-rbac https://docs.microsoft.com/en-us/azure/active-directory-b2c/claim-resolver-overview
Я знаю, что это старый пост, но появилась новая функция, называемая условным доступом. Более подробную информацию можно найти в документации. https://docs.microsoft.com/en-us/azure/active-directory-b2c/conditional-access-technical-profile