Как скрыть шаг проверки кода авторизации в пользовательской политике AD B2C? - PullRequest
0 голосов
/ 22 октября 2019

Можно ли создать пользовательскую политику для сброса пароля на этапе активации участника без ввода кода активации?

Я создаю пользователя с помощью API API Graph и отправляю электронное письмо с приглашением на указанный адрес электронной почты с заявкой extension_activationCode в качестве токена.

var emailClaim = new Claim("email", email);
            var codeClaim = new Claim("extension_ActivationCode", activationCode);
            policyClaims.Add(emailClaim);
            policyClaims.Add(codeClaim);

Я хочу, чтобы пользователь щелкнул ссылку в этом письме и просто установил пароль для своей учетной записи. В настоящее время пользовательский интерфейс автоматически заполняет код и показывает кнопку «Продолжить», чтобы пользователь мог щелкнуть его.

<UserJourney Id="MemberActivationDYP">
      <PreserveOriginalAssertion>false</PreserveOriginalAssertion>
      <OrchestrationSteps>           
        <OrchestrationStep Order="1" Type="ClaimsExchange" ContentDefinitionReferenceId="api.localaccount.activation">        
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountPasswordRecoveryVerifiedEmailExchange" TechnicalProfileReferenceId="LocalAccount-ActivationDYP" />
          </ClaimsExchanges>
        </OrchestrationStep>            
        <OrchestrationStep Order="2" Type="ClaimsExchange">
           <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
              <Value>objectId</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="AAD-UserReadUsingObjectIdExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
          </ClaimsExchanges>
        </OrchestrationStep>

<TechnicalProfile Id="LocalAccount-Activation">
          <DisplayName>Account Activation</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.localaccount.activation</Item>
            <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
          </CryptographicKeys>
          <IncludeInSso>false</IncludeInSso>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" />
            <InputClaim ClaimTypeReferenceId="extension_activationCode" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" Required="true" />
            <OutputClaim ClaimTypeReferenceId="extension_activationCode" Required="true" />         
            <OutputClaim ClaimTypeReferenceId="objectId" />
            <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
            <OutputClaim ClaimTypeReferenceId="extension_isAccountActivated" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
          </ValidationTechnicalProfiles>
        </TechnicalProfile>

        <TechnicalProfile Id="LocalAccount-ActivationDYP">
          <DisplayName>Member Portal Account Activation</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.localaccount.activation</Item>
            <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainerCRM" />
          </CryptographicKeys>
          <IncludeInSso>false</IncludeInSso>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" />
            <InputClaim ClaimTypeReferenceId="extension_activationCode" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" Required="true" />
            <OutputClaim ClaimTypeReferenceId="extension_activationCode" Required="true" />         
            <OutputClaim ClaimTypeReferenceId="objectId" />
            <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress-WithCodeDYP" />
          </ValidationTechnicalProfiles>
        </TechnicalProfile>
        <TechnicalProfile Id="AAD-UserReadUsingEmailAddress-WithCodeDYP">
          <Metadata>
            <Item Key="Operation">Read</Item>
            <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
            <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">An account could not be found for the provided user ID.</Item>
          </Metadata>
          <IncludeInSso>false</IncludeInSso>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames" Required="true" />
            <InputClaim ClaimTypeReferenceId="extension_activationCode" Required="true" />
          </InputClaims>
          <OutputClaims>
            <!-- Required claims -->
            <OutputClaim ClaimTypeReferenceId="objectId" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
            <!-- Optional claims -->
            <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
            <OutputClaim ClaimTypeReferenceId="displayName" />
            <OutputClaim ClaimTypeReferenceId="otherMails" />
            <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
            <OutputClaim ClaimTypeReferenceId="extension_TermsOfUseConsented" />
            <OutputClaim ClaimTypeReferenceId="extension_shareDataWithTP" />
            <OutputClaim ClaimTypeReferenceId="extension_isAccountActivated" />
          </OutputClaims>
          <IncludeTechnicalProfile ReferenceId="AAD-Common" />
        </TechnicalProfile>

Я хочу скрыть интерфейс шага кода активации, но не хочу пропустить этот шаг.

Есть ли способ скрыть от пользователя этот шаг?

1 Ответ

0 голосов
/ 24 октября 2019

Да - вы можете сделать это по магической ссылке .

По сути, вы помещаете адрес электронной почты в подписанный токен, чтобы сообщить B2C, чей пароль необходимо сбросить.

Обратите внимание, что новый способ сделать это через id_token_hint .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...