Как передать и проверить утверждение signInEmail при входе в систему External IDP с помощью настраиваемой политики Azure B2C? - PullRequest
0 голосов
/ 08 ноября 2019

Этот вопрос относится к этому .

. Мы хотели бы сделать следующее: в данный момент пользователь нажимает кнопку, например Facebook ИЛИ Microsoft account ИЛИ Corporate AD на странице входа, вызовите технический профиль проверки, чтобы проверить email адрес, который пользователь использует для входа.

Я попытался добавить OrchestrationStep, например:

<OrchestrationStep Order="4" 
  Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimEquals" 
      ExecuteActionsIf="false">
      <Value>idp</Value>
      <Value>CorporateAD</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="FetchMoreClaimsExchange" 
      TechnicalProfileReferenceId="REST-ValidateSignInEmail" />
  </ClaimsExchanges>
</OrchestrationStep>

Это на самом деле вызывает REST-ValidateSignInEmail, потому что я вижу ошибку, возвращаемую в URL, как это:

https://mywebsite.azurewebsites.net/#error=server_error&error_description=AADB2C%3a++is+disabled.%0d%0aCorrelation+ID%3a+bce3fd82-1111-4f17-ad99-ef7770ed8dda%0d%0aTimestamp%3a+2019-11-08+20%3a34%3a51Z%0d%0a&state=7b7c70e7-7a77-77d7-7d7e-7dd0e7b707e7

Приходит сообщение is+disabledиз REST API, который я собрал, но это, очевидно, говорит мне, что электронная почта \ signInEmail утверждает, что она ожидает, что параметр не отправляется \ не передается.

Это технический профиль:

<TechnicalProfile Id="REST-ValidateSignInEmail">
    <DisplayName>Validate Email</DisplayName>
    <Protocol Name="Proprietary" 
            Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
       <Item Key="ServiceUrl">{Settings:AzureAppServiceUrl}/api/B2C/ValidateSignInEmail</Item>
       <Item Key="AuthenticationType">None</Item>
       <Item Key="SendClaimsIn">Body</Item>
    </Metadata>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" 
              PartnerClaimType="UserEmail" />
        </InputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

Можете ли вы пролить свет на то, как подойти к этому?

1 Ответ

0 голосов
/ 09 ноября 2019

Обычно после публикации вопроса я продолжаю возиться с кодом.

Получилось так:

<TechnicalProfile Id="REST-ValidateSignInEmail">
    <DisplayName>Validate Email</DisplayName>
    <Protocol Name="Proprietary" 
            Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
       <Item Key="ServiceUrl">{Settings:AzureAppServiceUrl}/api/B2C/ValidateSignInEmail</Item>
       <Item Key="AuthenticationType">None</Item>
       <Item Key="SendClaimsIn">Body</Item>
    </Metadata>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" 
              PartnerClaimType="UserEmail" />
        </InputClaims>
        <InputClaim ClaimTypeReferenceId="email" 
              PartnerClaimType="UserEmail" />
        </InputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

Обратите внимание, что я добавил новый InputClaim с ClaimTypeReferenceId="email",email - это значение заявки, которое передается при использовании внешнего IDP.

Этот пример политики показал мне, что я могу добавить OrchestrationStep прямо перед JwtIssuer. У нас также может быть это без каких-либо предварительных условий, таких как:

<OrchestrationStep Order="7" 
   Type="ClaimsExchange">
   <ClaimsExchanges>
     <ClaimsExchange Id="REST-ValidateSignInEmail" 
       TechnicalProfileReferenceId="REST-ValidateSignInEmail" />
   </ClaimsExchanges>
 </OrchestrationStep>

Это будет вызвано для всех IDP.


Azure Active Directory B2C: пользовательский CIAMПоездки пользователей

...