Также можно создать преобразование утверждений, которое проверяет, является ли IP-адрес клиента надежным или нет, следующим образом.
- Создайте один тип утверждений, например clientIP , типа строка , представляющая IP-адрес клиента:
<ClaimType Id="clientIP">
<DisplayName>Client IP Address</DisplayName>
<DataType>string</DataType>
</ClaimType>
и другой тип утверждения, например isTrustedIP , типа логический , представляющий является ли 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
.