gpt4 book ai didi

azure-ad-b2c - Azure AD B2C 在注册策略中预填充自定义属性

转载 作者:行者123 更新时间:2023-12-03 09:28:57 27 4
gpt4 key购买 nike

从 Web 应用程序 (ASP.Net MVC) 调用时,Azure AD B2C 是否支持在注册策略中预填充自定义属性?

我们可以创建自定义 SignUp 属性,但我们无法在文档中找到如何传递值以填充自定义属性的规范。如果不支持开箱即用,是否有人找到了解决方法?

以下是上下文的更多详细信息,以防有人遇到类似情况并找到有用的解决方案:

我们探索了使用 Azure AD B2C 解决以下场景的选项:注册用户通过发送邀请电子邮件来邀请其他人注册应用程序,其中包含应用程序登录页面的 URL 以及特殊邀请代码 (guid) 作为查询参数,因此它可以单击链接并重定向到注册页面。受邀者创建帐户后,我们需要使用代码将新创建的用户与发送邀请的用户相关联。

目前,这是在 ASP.Net 中使用默认身份提供程序实现的(使用 AspNet... 表将用户数据存储在数据库中)。通过使用 Azure AD B2C 替换本地标识提供者,我们在往返 Azure AD B2C 注册页面期间丢失了上下文。用户单击电子邮件上的链接并进入 SIGnUp 页面,但未预先填充邀请代码。

最佳答案

邀请流程的工作示例是 here .

WingTipGamesWebApplication项目,InvitationController Controller 类有两个 Action 方法,CreateRedeem .
Create action 方法将签名的兑换链接发送到受邀用户的电子邮件地址。此兑换链接包含此电子邮件地址。它还可以包含邀请码。
Redeem action 方法处理赎回链接。它传递电子邮件地址,如 verify_email 在使用 Wingtip Games 应用程序的客户端 secret 签名的 JWT 中声明(请参阅 CreateSelfIssuedToken 项目中 Startup 类中的 WingTipGamesWebApplication 方法),从兑换链接到 邀请函政策。它也可以通过邀请码。

邀请函政策可以在 here 找到.

邀请函政策声明 verify_email 声明作为输入声明:

<RelyingParty>
<DefaultUserJourney ReferenceId="Invitation" />
<TechnicalProfile Id="Invitation">
<InputTokenFormat>JWT</InputTokenFormat>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="WingTipGamesClientSecret" />
</CryptographicKeys>
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_VerifiedEmail" />
</InputClaims>
</TechnicalProfile>
</RelyingParty>

extension_verifiedEmail 声明类型为只读字段(因此最终用户无法修改),映射到 verify_email 输入声明:

<BuildingBlocks>
<ClaimsSchema>
<ClaimType Id="extension_VerifiedEmail">
<DisplayName>Verified Email</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="verified_email" />
<Protocol Name="OpenIdConnect" PartnerClaimType="verified_email" />
<Protocol Name="SAML2" PartnerClaimType="http://schemas.wingtipb2c.net/identity/claims/verifiedemail" />
</DefaultPartnerClaimTypes>
<UserInputType>Readonly</UserInputType>
</ClaimType>
</ClaimsSchema>
</BuildingBlocks>

邀请函用户旅程可以在 here 中找到.

的第二个编排步骤邀请函用户旅程执行 LocalAccount-Registration-VerifiedEmail 技术简介:

<UserJourney Id="Invitation">
<OrchestrationSteps>
...
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
...
<ClaimsExchange Id="LocalAccountRegistrationExchange" TechnicalProfileReferenceId="LocalAccount-Registration-VerifiedEmail" />
</ClaimsExchanges>
</OrchestrationStep>
</OrchestrationSteps>
</UserJourney>

LocalAccount-Registration-VerifiedEmail 技术配置文件使用经过验证的电子邮件地址注册本地帐户:

<TechnicalProfile Id="LocalAccount-Registration-VerifiedEmail">
<DisplayName>WingTip Account</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.registration</Item>
<Item Key="IpAddressClaimReferenceId">IpAddress</Item>
<Item Key="language.button_continue">Create</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="TokenSigningKeyContainer" />
</CryptographicKeys>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="CreateEmailFromVerifiedEmail" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_VerifiedEmail" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="extension_VerifiedEmail" Required="true" />
<OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="displayName" Required="true" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
<OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
<OutputClaim ClaimTypeReferenceId="newUser" />
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="sub" />
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists" />
</ValidationTechnicalProfiles>
<UseTechnicalProfileForSessionManagement ReferenceId="SSOSession-AzureActiveDirectory" />
</TechnicalProfile>

之前通过 注册本地账号AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists 验证技术简介, CreateEmailFromVerifiedEmail claim 转换复制 verify_email claim 到 邮箱 宣称:

<ClaimsTransformation Id="CreateEmailFromVerifiedEmail" TransformationMethod="FormatStringClaim">
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_VerifiedEmail" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="stringFormat" DataType="string" Value="{0}" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>

要针对本地帐户保存邀请码,您必须:
  • 将“extension_InvitationCode”声明添加到声明架构
  • 将其作为输入声明添加到 邀请函政策
  • 将其作为输入声明添加到 LocalAccount-Registration-VerifiedEmail 技术简介
  • 将其作为持久声明添加到 AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExist 技术简介
  • 关于azure-ad-b2c - Azure AD B2C 在注册策略中预填充自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380468/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com