You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地账户登录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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:53:12