从Web应用程序(ASP.Net MVC)调用时,Azure AD B2C是否支持在SignUp策略中预先填充自定义属性?
我们可以创建自定义SignUp属性,但是我们无法在文档中找到如何传递值来填充自定义属性的规范.如果不支持开箱即用,是否有人找到了解决方法?
如果有人遇到类似的情况并找到了有用的解决方案,下面是上下文的更多细节:
我们将探索使用Azure AD B2C解决以下方案的选项:注册用户通过发送邀请电子邮件邀请其他人注册该应用程序,该电子邮件具有应用程序登录页面的URL以及特殊邀请代码(guid)查询参数,因此它可以单击该链接并重定向到注册页面.受邀人员创建帐户后,我们需要使用该代码将新创建的用户与发送邀请的用户相关联.
目前,这是使用默认身份提供程序在ASP.Net中实现的(使用AspNet ...表将用户数据存储在数据库中).通过使用Azure AD B2C替换本地身份提供程序,我们将在Azure AD B2C注册页面的往返过程中丢失上下文.用户单击电子邮件上的链接并转到SIgnUp页面,但未预先填充邀请代码.
邀请流的工作样本在这里.
在WingTipGamesWebApplication项目中,InvitationController控制器类有两个动作方法,Create和Redeem.
该Create操作方法发送一个签名赎回链接的电子邮件地址的邀请的用户.此兑换链接包含此电子邮件地址.它还可以包含邀请代码.
该Redeem操作方法处理赎回链接.它通过电子邮件地址,作为JWT中的verified_email声明,该声明使用Wingtip Games应用程序的客户端密钥(请参阅项目CreateSelfIssuedToken中的Startup类中的方法WingTipGamesWebApplication),从兑换链接到邀请策略进行签名.它也可以传递邀请码.
将邀请政策可以在这里找到这里.
将邀请政策声明verified_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>
Run Code Online (Sandbox Code Playgroud)
所述extension_verifiedEmail权利要求类型,它被声明为只读字段(以便它无法由最终用户修改),被映射到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>
Run Code Online (Sandbox Code Playgroud)
将邀请用户旅途中可以找到这里.
邀请用户旅程的第二个编排步骤执行LocalAccount-Registration-VerifiedEmail技术配置文件:
<UserJourney Id="Invitation">
<OrchestrationSteps>
...
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
...
<ClaimsExchange Id="LocalAccountRegistrationExchange" TechnicalProfileReferenceId="LocalAccount-Registration-VerifiedEmail" />
</ClaimsExchanges>
</OrchestrationStep>
</OrchestrationSteps>
</UserJourney>
Run Code Online (Sandbox Code Playgroud)
该LocalAccount登记-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>
Run Code Online (Sandbox Code Playgroud)
本地帐户是由注册前AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExists验证技术简介中,CreateEmailFromVerifiedEmail声称转型复制verified_email要求的电子邮件要求:
<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>
Run Code Online (Sandbox Code Playgroud)
要针对本地帐户保存邀请代码,您必须:
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |