Azure B2C 自定义策略从查询参数读取值并传递到 REST API 主体

问题描述 投票:0回答:1

我有查询参数“invite_token”。我想从注册页面阅读此内容并将其发送到 REST API 帖子正文。

  <ClaimType Id="inviteToken">
    <DataType>string</DataType>
  </ClaimType>

REST API 技术简介,

<TechnicalProfile Id="REST-API-SIGNUP-VALIDATION">
          <DisplayName>Validate user input data</DisplayName>
          <Protocol Name="Proprietary"
            Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <Metadata>
            <Item Key="ServiceUrl">https://mydomain/verify-email</Item>
            <Item Key="AuthenticationType">None</Item>
            <Item Key="SendClaimsIn">Body</Item>
          </Metadata>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" />
            <InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
            <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
            <InputClaim ClaimTypeReferenceId="inviteToken" PartnerClaimType="inviteToken" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
          </OutputClaims>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
        </TechnicalProfile>

我定制的 LocalAccountSignUpWithLogonEmail 是,

<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
  <DisplayName>Email signup</DisplayName>
  <Protocol Name="Proprietary"
    Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
    <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email"
      DefaultValue="{OAUTH-KV:register_email}"
      AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="inviteToken"
      DefaultValue="{OAUTH-KV:invite_token}"
      AlwaysUseDefaultValue="true" />
  </InputClaims>
  <DisplayClaims>
    <!-- <DisplayClaim DisplayControlReferenceId="emailVerificationControl" /> -->
    <DisplayClaim ClaimTypeReferenceId="email" Required="true" />
    <DisplayClaim ClaimTypeReferenceId="newPassword" Required="true" />
    <DisplayClaim ClaimTypeReferenceId="reenterPassword" Required="true" />

    <!-- Optional claims, to be collected from the user -->
    <DisplayClaim ClaimTypeReferenceId="displayName" />
    <DisplayClaim ClaimTypeReferenceId="givenName" />
    <DisplayClaim ClaimTypeReferenceId="surName" />
    <DisplayClaim ClaimTypeReferenceId="inviteToken" />
  </DisplayClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
    <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />
    <OutputClaim ClaimTypeReferenceId="newUser" />

    <!-- Optional claims, to be collected from the user -->
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surName" />
    <OutputClaim ClaimTypeReferenceId="inviteToken" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="REST-API-SIGNUP-VALIDATION" />
    <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
  </ValidationTechnicalProfiles>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

我希望我的请求正文是电子邮件、名字、姓氏和邀请令牌。 我收到电子邮件、名字和姓氏,但没有收到邀请令牌。如何在请求正文中发送邀请令牌?

rest azure-ad-b2c azure-devops-rest-api azure-ad-b2c-custom-policy
1个回答
0
投票

您不需要在

LocalAccountSignUpWithLogonEmail
内部处理它,除非您想要将其显示给用户。

您只需将其传递到

REST-API-SIGNUP-VALIDATION
技术配置文件即可,如下所示。

<TechnicalProfile Id="REST-API-SIGNUP-VALIDATION">
    <DisplayName>Validate user input data</DisplayName>
    <Protocol Name="Proprietary"
    Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
      <Item Key="ServiceUrl">https://mydomain/verify-email</Item>
      <Item Key="AuthenticationType">None</Item>
      <Item Key="SendClaimsIn">Body</Item>
      <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
    </Metadata>
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" />
      <InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
      <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
      <InputClaim ClaimTypeReferenceId="inviteToken" PartnerClaimType="inviteToken" DefaultValue="{OAUTH-KV:invite_token}" AlwaysUseDefaultValue="true" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
    </OutputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

另一种常见做法是策略用户旅程中的第一个编排步骤是解析您所需的输入参数。一个例子是:

<OrchestrationStep Order="1" Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="InitialiseJourney" TechnicalProfileReferenceId="InitialiseJourney"/>
  </ClaimsExchanges>
</OrchestrationStep>
<TechnicalProfile Id="InitialiseJourney">
  <DisplayName>Initialise journey claims</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.UserJourneyContextProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
  </Metadata>
  <OutputClaims>
    <!-- Invitation Claims -->
    <OutputClaim ClaimTypeReferenceId="email" DefaultValue="{OAUTH-KV:register_email}" AlwaysUseDefaultValue="true" />
    <OutputClaim ClaimTypeReferenceId="inviteToken" DefaultValue="{OAUTH-KV:invite_token}" AlwaysUseDefaultValue="true" />
  </OutputClaims>
</TechnicalProfile>
© www.soinside.com 2019 - 2024. All rights reserved.