B2 C Custom Sign Up - отладка обмена заявками с внешним API - PullRequest
0 голосов
/ 28 января 2020

Я следую этому уроку

https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-custom-rest-api-netfw

Я настроил его, поскольку моя цель здесь - не дать кому-либо зарегистрироваться с отображаемым именем, которое уже существует

Тем не менее, я всегда получаю сообщение об ошибке "Обмен утверждениями 'REST-API-SignUp', указанный на шаге '2, возвращает ответ об ошибке HTTP, который не может быть проанализирован."

I проверили конечную точку с почтальоном, используя эту модель, и она вернулась, как и ожидалось

Извлечение расширений Trust Framework является следующим:

<BasePolicy>
   <TenantId>null.onmicrosoft.com</TenantId>
  <PolicyId>B2C_1A_TrustFrameworkBase</PolicyId>
</BasePolicy>
<BuildingBlocks>
<ClaimsSchema>
  <ClaimType Id="uniqueName">
    <DisplayName>uniqueName</DisplayName>
    <DataType>string</DataType>
    <UserHelpText>Customer unique name</UserHelpText>
  </ClaimType>
</ClaimsSchema>
</BuildingBlocks>
<ClaimsProviders>
<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <!-- Custom Restful service -->
    <TechnicalProfile Id="REST-API-SignUp">
      <DisplayName>Validate user's input data and return unique name claim</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://null.azurewebsites.NET/api/AzureB2C/validate</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <!-- Set AuthenticationType to Basic or ClientCertificate in production environments -->
        <Item Key="AuthenticationType">Basic</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_B2cRestClientId" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_B2cRestClientSecret" />
      </CryptographicKeys>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" />
        <InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
        <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="uniqueName" PartnerClaimType="uniqueName" />
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
    <!-- Change LocalAccountSignUpWithLogonEmail technical profile to support your validation technical profile -->
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="uniqueName" PartnerClaimType="uniqueName" />
      </OutputClaims>
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="REST-API-SignUp" />
      </ValidationTechnicalProfiles>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Зарегистрируйте вход в извлечение

  <BasePolicy>
    <TenantId>null.onmicrosoft.com</TenantId>
    <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
  </BasePolicy>
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
  <DisplayName>PolicyProfile</DisplayName>
  <Protocol Name="OpenIdConnect" />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
    <OutputClaim ClaimTypeReferenceId="identityProvider" />
    <OutputClaim ClaimTypeReferenceId="uniqueName" DefaultValue="" />
    <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
  </OutputClaims>
  <SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>

API должен возвращать ответ через это

public class B2CResponseContent
{
    public string version { get; set; }
    public int status { get; set; }
    public string userMessage { get; set; }

    public B2CResponseContent(string message, HttpStatusCode status)
    {
        this.userMessage = message;
        this.status = (int)status;
        this.version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }
}

1 Ответ

1 голос
/ 29 января 2020

Успешный ответ должен быть возвращен следующим образом:

return Ok(outputClaimsModel);

, который возвращает:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "uniqueName": "Chris Padgett"
}

Это только неудачный ответ, который должен быть возвращен с использованием модели B2CResponseContent.

Чтобы устранить непредвиденный ответ, вам нужно отправить журналы Azure AD B2 C в Application Insights .

...