本地账户登录KMSI配置:将复选框改为是/否按钮及独立用户旅程
本地账户KMSI配置解决方案
针对你提出的三个问题,以下是具体的配置方案:
1. 设置独立的Technical Profile捕获KMSI选择
首先需要定义存储用户选择的声明,再创建专门的自断言技术配置文件来收集该选择:
步骤1:添加声明定义
在ClaimsSchema节点下添加用于存储KMSI选择的声明:
<ClaimType Id="keepMeSignedIn"> <DisplayName>Keep me signed in?</DisplayName> <DataType>boolean</DataType> <UserHelpText>Choose whether to stay signed in on this device.</UserHelpText> </ClaimType>
步骤2:创建独立的Technical Profile
在本地账户的ClaimsProvider下添加自断言技术配置文件,专门用于收集用户的KMSI选择:
<TechnicalProfile Id="SelfAsserted-KMSISelection"> <DisplayName>Keep Me Signed In Selection</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.selfasserted</Item> <Item Key="setting.showContinueButton">true</Item> <Item Key="setting.showCancelButton">false</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="keepMeSignedIn" Required="true" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
2. 将UI从复选框改为「是/否」按钮
通过修改声明的UserInputType为单选按钮,并配置选项值,即可实现「是/否」按钮式交互:
修改ClaimsSchema中的keepMeSignedIn声明:
<ClaimType Id="keepMeSignedIn"> <DisplayName>Keep me signed in?</DisplayName> <DataType>boolean</DataType> <UserHelpText>Choose whether to stay signed in on this device.</UserHelpText> <UserInputType>RadioSingleSelect</UserInputType> <Restriction> <Enumeration Text="Yes" Value="true" SelectByDefault="false" /> <Enumeration Text="No" Value="false" SelectByDefault="true" /> </Restriction> </ClaimType>
RadioSingleSelect指定UI为单选按钮组Enumeration定义按钮文本和对应的值,默认选中「No」
3. 在现有用户旅程中分支收集KMSI选择
在用户登录验证完成后,新增编排步骤调用KMSI选择的技术配置文件,并根据选择结果配置会话:
步骤1:添加KMSI收集步骤
在SignUpOrSignIn用户旅程的编排步骤中,插入专门收集KMSI选择的步骤(需放在登录验证步骤之后):
<UserJourneys> <UserJourney Id="SignUpOrSignIn"> <OrchestrationSteps> <!-- 原有步骤1:联合登录注册 --> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <!-- 原有内容保持不变 --> </OrchestrationStep> <!-- 原有步骤2:本地账户登录验证(若不存在需补充) --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <!-- 新增步骤:收集KMSI选择 --> <OrchestrationStep Order="3" Type="ClaimsExchange"> <Preconditions> <!-- 仅针对本地账户用户触发 --> <Precondition Type="ClaimsExist" ExecuteActionsIf="false"> <Value>email</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="KMSISelectionExchange" TechnicalProfileReferenceId="SelfAsserted-KMSISelection" /> </ClaimsExchanges> </OrchestrationStep> <!-- 后续步骤:根据选择配置KMSI会话 --> <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"> <Preconditions> <!-- 若用户选择启用KMSI,则使用带KMSI配置的签发器 --> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>keepMeSignedIn</Value> <Value>true</Value> <Action>OverrideTechnicalProfile</Action> <OverrideAction> <TechnicalProfileReferenceId="JwtIssuer-KMSI" /> </OverrideAction> </Precondition> </Preconditions> </OrchestrationStep> </OrchestrationSteps> </UserJourney> </UserJourneys>
步骤2:配置KMSI签发器和会话管理
添加支持KMSI的JWT签发器技术配置文件:
<TechnicalProfile Id="JwtIssuer-KMSI"> <DisplayName>JWT Issuer (KMSI Enabled)</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputTokenFormat>JWT</OutputTokenFormat> <Metadata> <Item Key="IssuerUri">https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/B2C_1A_signuporsignin</Item> <Item Key="setting.tokenExpirationTimeInSeconds">86400</Item> <!-- 24小时有效期 --> <Item Key="setting.enableKmsi">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="identityProvider" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-KMSI" /> </TechnicalProfile>
添加KMSI会话管理技术配置文件:
<TechnicalProfile Id="SM-KMSI"> <DisplayName>KMSI Session Management</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SessionManagement.DefaultSessionManagementProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="SessionExpiryType">Absolute</Item> <Item Key="SessionExpiryInSeconds">86400</Item> <!-- 24小时会话有效期 --> <Item Key="enableRememberMe">true</Item> </Metadata> </TechnicalProfile>
内容的提问来源于stack exchange,提问作者Anandakumar Palanisamy
相关产品推荐
相关产品推荐

