邀请流程的工作示例为here。
在WingTipGamesWebApplication
项目中,InvitationController
控制器类有两个操作方法,Create
和Redeem
。
Create
操作方法将已签名的兑换链接发送给受邀用户的电子邮件地址。此兑换链接包含此电子邮件地址。它也可以包含邀请码。
Redeem
操作方法处理兑换链接。它将电子邮件地址作为verified_email声明在由Wingtip Games应用程序的客户端密钥签名的JWT中(请参阅中类中中的方法),从兑换链接到邀请政策。它也可以传递邀请码。
邀请政策可以在here找到。
的邀请政策声明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>
的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>
邀请用户旅程可在here中找到。
的邀请用户旅程的第二编制步骤执行LocalAccount登记-VerifiedEmail技术简介:
<UserJourney Id="Invitation">
<OrchestrationSteps>
...
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
...
<ClaimsExchange Id="LocalAccountRegistrationExchange" TechnicalProfileReferenceId="LocalAccount-Registration-VerifiedEmail" />
</ClaimsExchanges>
</OrchestrationStep>
</OrchestrationSteps>
</UserJourney>
的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>
要保存对本地帐户的邀请码,您必须:
- 添加“extension_InvitationCode”要求权利要求的模式
- 其添加为输入声明到邀请政策
- 其添加为输入声明到LocalAccount登记-VerifiedEmail技术简介
- 添加它作为一个持久要求的AzureActiveDirectoryStore-WriteUserByEmail-ThrowIfExist技术简介
欢迎来到Stack Overflow。你已经尝试过这么做了什么?请回顾[我如何问一个好问题](https://stackoverflow.com/help/how-to-ask)。堆栈溢出不是一种编码服务。预计您会在发布之前研究您的问题,并尝试亲自编写代码***。如果您遇到* specific *,请返回并包含[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)以及您尝试的内容摘要,以便我们提供帮助。 – FluffyKitten
@FluffyKitten对此没有具体说明?第一句话是一个非常具体的问题。并且我可能会添加一个很好的问题:)问候,Mike D. – spottedmahn
@spottedmahn自从我发表评论以来,该问题已被编辑。但仅仅是单独具体是不够的 - 在我最初的评论中看到其余的要求。 – FluffyKitten