使用社交登录(OAuth2),但使用自定义策略限制电子邮件地址

时间:2019-10-14 16:48:33

标签: azure azure-ad-b2c

我想使用B2C自定义策略,允许用户使用Google进行注册和登录,但限制为一组已知的电子邮件域名,否则会出现错误。

我基于this starter pack

这是我尝试过的:

  • 在电子邮件声明中添加<Restrictions>和正则表达式。这些似乎仅适用于自我主张。
  • 在Google ValidationTechnicalProfile的技术资料中添加ClaimsProvider。再次,这些似乎仅适用于自动声明技术简介。
  • 将其添加到SelfAsserted-Social技术资料中,该资料在Google后面运行。这是最有希望的。我会收到验证失败的消息,但仅在我从不跳过此步骤的情况下。由于用户已经存在,因此具有中断登录的作用。

我的验证声明转换看起来像这样。 (我暂时只限于一个域。)

      <ClaimsTransformation Id="ExtractDomain" TransformationMethod="ParseDomain">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="emailAddress" />
        </InputClaims>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="domain" TransformationClaimType="domain" />
        </OutputClaims>
      </ClaimsTransformation>

      <ClaimsTransformation Id="AssertDomainEqual" TransformationMethod="AssertStringClaimsAreEqual">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="domain" TransformationClaimType="inputClaim1" />
          <InputClaim ClaimTypeReferenceId="acceptableDomain" TransformationClaimType="inputClaim2" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
        </InputParameters>
      </ClaimsTransformation>

和我的TechnicalProfile

<TechnicalProfile Id="Validate-Email">
          <DisplayName>Validate email address</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="acceptableDomain" DefaultValue="myacceptabledomain.com" />
            <InputClaim ClaimTypeReferenceId="domain" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="email" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="AssertDomainEqual" />
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
        </TechnicalProfile>

我要按照正确的方式进行吗?

是否可以无声地验证声明(无需自声明步骤)?

有没有这样的例子?我唯一能找到的是用于验证本地帐户的电子邮件地址。

0 个答案:

没有答案