英文:
Technical Profile fails to match user account with email (signInNames.emailAddress) claim
问题
The content provided does not ask about the designation or information regarding a terrorist organization. If you have any other inquiries or need assistance on a different topic, please let me know.
英文:
Can anyone explain to me (before Azure B2C Custom Policies make me pull what's left of my hair out), why this technical profile fails to ever return an "objectId" when a user account exists in Azure B2C. I am collecting the email claim in a previous screen and calling the technical profile from the orchestration step.
I can see the profile executing in my Application Insights logs and I have confirmed that the email address I use in the claim is in the directory. But every time, no matter which email address I use, I never get an objectId back which means I can never detect if the user exists or not!
Technical Profile
     <TechnicalProfile Id="UE-AAD-CheckAccountExistsByEmail">
        <Protocol Name="Proprietary"
        Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="Operation">Read</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">An account could not be found for the provided email address.</Item>
      </Metadata>
      <IncludeInSso>false</IncludeInSso>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true"/>
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId"/>
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
Orchestration Step
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <Preconditions>
        <!-- Skip this if we already have an object id from single signon -->
        <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
          <Value>objectIdFromSession</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <!-- Call a technical profile to see if an account can be found with the email supplied in AD -->
        <ClaimsExchange Id="AccountExistsClaim"
          TechnicalProfileReferenceId="UE-AAD-CheckAccountExistsByEmail" />
      </ClaimsExchanges>
    </OrchestrationStep>
答案1
得分: 0
I'll provide the translation without additional information:
你已将 ClaimsTransformationProtocolProvider 指定为处理程序。
你需要将 AAD 提供程序指定为处理程序以进行 Graph API 查询。
尽管如果 AAD-Common 已经包含协议元素,你不需要在这里再次指定,因为它将从那里包含。
就像这样:
     <TechnicalProfile Id="UE-AAD-CheckAccountExistsByEmail">
        <!-- 但如果 AAD-Common 已经包含它,实际上你不需要这个 -->
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="Operation">Read</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">提供的电子邮件地址未找到帐户。</Item>
      </Metadata>
      <IncludeInSso>false</IncludeInSso>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true"/>
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId"/>
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
ClaimsTransformationProtocolProvider 用于运行声明转换以生成新的声明或修改现有的声明。
它不用于查询 AAD。
英文:
You have specified ClaimsTransformationProtocolProvider as the handler.
You need the AAD provider as the handler to make Graph API queries.
Though if AAD-Common already has the Protocol element, you don't need to specify it here again since it'll be included from there.
Like so:
     <TechnicalProfile Id="UE-AAD-CheckAccountExistsByEmail">
        <!-- You don't actually need this though if AAD-Common has it -->
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="Operation">Read</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">An account could not be found for the provided email address.</Item>
      </Metadata>
      <IncludeInSso>false</IncludeInSso>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true"/>
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId"/>
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
ClaimsTransformationProtocolProvider is used for running claims transformations to produce new claims or modify existing claims.
It is not used for querying AAD.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论