从Web应用程序(ASP.Net MVC)调用时,Azure AD B2C是否支持在SignUp策略中预先填充自定义属性?
我们可以创建自定义SignUp属性,但是我们无法在文档中找到如何传递值来填充自定义属性的规范。如果不支持开箱即用,是否有人找到了解决方法?
如果有人遇到类似情况并找到了有用的解决方案,以下是上下文的更多细节:
我们探索了使用Azure AD B2C解决以下方案的选项:注册用户通过发送邀请电子邮件邀请其他人注册应用程序,该电子邮件具有应用程序登录页面的URL以及特殊的邀请代码(guid )作为查询参数,它可以单击链接并重定向到注册页面。受邀人员创建帐户后,我们需要使用该代码将新创建的用户与发送邀请的用户相关联。
目前,这是使用默认身份提供程序在ASP.Net中实现的(使用AspNet ...表存储用户数据在数据库中)。通过使用Azure AD B2C替换本地身份提供程序,我们将在Azure AD B2C注册页面的往返过程中丢失上下文。用户单击电子邮件上的链接并转到SIgnUp页面,但未预先填充邀请代码。
答案 0 :(得分:7)
邀请流的工作样本为here。
在WingTipGamesWebApplication
项目中,InvitationController
控制器类有两种操作方法,Create
和Redeem
。
Create
操作方法将签名的兑换链接发送到受邀用户的电子邮件地址。此兑换链接包含此电子邮件地址。它还可以包含邀请码。
Redeem
操作方法处理兑换链接。它传递了电子邮件地址,作为使用Wingtip Games应用程序的客户端密钥签名的JWT中的 verified_email 声明(请参阅CreateSelfIssuedToken
类Startup
中的WingTipGamesWebApplication
方法<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>
项目),从兑换链接到邀请政策。它也可以传递邀请码。
可以在here找到邀请政策。
邀请政策将 verified_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>
extension_verifiedEmail 声明类型(声明为只读字段(以便最终用户无法修改))映射到 verified_email < / strong>输入声明:
<UserJourney Id="Invitation">
<OrchestrationSteps>
...
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
...
<ClaimsExchange Id="LocalAccountRegistrationExchange" TechnicalProfileReferenceId="LocalAccount-Registration-VerifiedEmail" />
</ClaimsExchanges>
</OrchestrationStep>
</OrchestrationSteps>
</UserJourney>
邀请用户旅程可在here。
中找到邀请用户旅程的第二个编排步骤执行 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>
LocalAccount-Registration-VerifiedEmail 技术配置文件使用经过验证的电子邮件地址注册本地帐户:
<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>
在 AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists 验证技术配置文件注册本地帐户之前, CreateEmailFromVerifiedEmail 声明转换会将 verified_email 声明复制到电子邮件声明:
<ion-slides pager>
<ion-slide *ngFor="let blog of blogs | async" >
<h2>{{ blog.title }}</h2>
<p>
<a target="_blank" class="slider-read-more" ion-button outline color="secondary" (click)="blogDetail(blog)">ვრცლად</a>
</p>
</ion-slide>
</ion-slides>
要针对本地帐户保存邀请代码,您必须: