gpt4 book ai didi

azure-active-directory - 撤销 Azure AD B2c 用户的登录 session 不适用于 native 应用程序

转载 作者:行者123 更新时间:2023-12-04 03:58:29 26 4
gpt4 key购买 nike

我有一个具有移动(android 和 Ios)和 Web UI(SPA)的解决方案,它们都与通用 api 对话。
我们正在使用 AD B2C 对用户进行身份验证。我们有系统管理员删除用户的业务需求。我们正在使用图形 api 删除后端服务中的用户。这是分两步完成的。

    1) revoke the sign in session to kill the active sessions. Document(https://docs.microsoft.com/en-us/graph/api/user-revokesigninsessions?view=graph-rest-1.0&tabs=http)

2) Deleting the user account from b2c using graph api.
一旦访问 token 的生命周期到期,被删除的用户将从 web ui(SPA) 注销,但不会从移动应用程序注销。
对于移动应用程序,我们使用的是 MSALandroid 0.2.2,而对于 SPA,我们使用的是 MSAL angular 0.1.4。
还尝试在 ad b2c 中为移动和 Web 应用程序配置单个和两个不同的应用程序。
我是否缺少任何移动应用程序。如何从移动应用程序中撤销 session ?

最佳答案

为了使用户 token 无效,您需要执行以下操作:

  • 对用户调用“无效刷新 token ”自定义操作。对此端点的调用将“refreshTokensValidFromDateTime”属性更新为 dateTimeNow(UTC)
  • 更新您的自定义策略以在使用刷新 token 获取新的访问/idToken 时查看此字段

  • 这些更改会检查“refreshTokensValidFromDateTime”是否比发出的 refreshToken 更新。如果是,则意味着旧的刷新 token 已失效。
    要使用户的刷新 token 无效,您需要在图中调用此端点 https://graph.windows.net/contoso.onmicrosoft.com/users/3ff8bee2-d1dc-445a-bca1-64101d478f43/invalidateAllRefreshTokens?api-version=1.6
    时钟偏移
    创建刷新 token 的服务器(Azure AD B2C 服务)与在用户对象上标记 refreshTokenValidFromDateTime 值的服务器(Graph 服务)之间的观察时间可能存在差异,因此存在时钟偏差。当前设置为 300000 毫秒(或 5 分钟)
    为了解决时钟偏移,您可以更新 ClaimsTransformtion = AssertRefreshTokenIssuedLaterThanValidFromDate有了这个值
    <InputParameter Id="TreatAsEqualIfWithinMillseconds" DataType="int" Value="10000" />
    应用程序可以临时调用刷新 token 失效,或者您可以在密码重置过程中编写一个 API 来调用图形,或者在需要时按需调用它。在这种情况下,经历密码重置过程的用户将看到他们的 session 已结束,并且用户将在所有其他设备上收到提示。
    需要更改
    对于自定义策略,需要添加以下技术配置文件 (TP)、声明转换 (CT) 和声明提供程序 (CP),以便策略检查刷新 token 是否无效。
    <ClaimsTransformation Id="AssertRefreshTokenIssuedLaterThanValidFromDate" TransformationMethod="AssertDateTimeIsGreaterThan">
            <InputClaims>
              <InputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" TransformationClaimType="leftOperand" />
              <InputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" TransformationClaimType="rightOperand" />
            </InputClaims>
            <InputParameters>
              <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" />
              <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" />
               <InputParameter Id="TreatAsEqualIfWithinMillseconds" DataType="int" Value="10000" />
            </InputParameters>
          </ClaimsTransformation>
    ...
        <ClaimsProvider>
          <DisplayName>Token Issuer</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="JwtIssuer">
              <DisplayName>JWT Issuer</DisplayName>
              <Protocol Name="None" />
              <OutputTokenFormat>JWT</OutputTokenFormat>
              <Metadata>
                <Item Key="client_id">{service:te}</Item>
                <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
                <Item Key="RefreshTokenUserJourneyId">RedeemRefreshTokenV1</Item>
              </Metadata>
    <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
    <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" />
    </CryptographicKeys>
              <InputClaims />
              <OutputClaims />
            </TechnicalProfile>
    ...
            <TechnicalProfile Id="TpEngine_RefreshTokenReadAndSetup">
              <DisplayName>Trustframework Policy Engine Refresh Token Setup Technical Profile</DisplayName>
              <Protocol Name="None" />
              <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="objectId" />
                <OutputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" />
              </OutputClaims>
            </TechnicalProfile>
          </TechnicalProfiles>
    ...
            <TechnicalProfile Id="AAD-UserReadUsingObjectId-CheckRefreshTokenDate">
              <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" />
              </OutputClaims>
              <OutputClaimsTransformations>
                <OutputClaimsTransformation ReferenceId="AssertRefreshTokenIssuedLaterThanValidFromDate" />
              </OutputClaimsTransformations>
              <IncludeTechnicalProfile ReferenceId="AAD-UserReadUsingObjectId" />
            </TechnicalProfile>
    ...
        <UserJourney Id="RedeemRefreshTokenV1">
          <AssuranceLevel>LOA1</AssuranceLevel>
          <PreserveOriginalAssertion>false</PreserveOriginalAssertion>
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="RefreshTokenSetupExchange" TechnicalProfileReferenceId="TpEngine_RefreshTokenReadAndSetup" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="2" Type="ClaimsExchange">
              <ClaimsExchanges>
                <ClaimsExchange Id="CheckRefreshTokenDateFromAadExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId-CheckRefreshTokenDate" />
              </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
          </OrchestrationSteps>
        </UserJourney>
    这个旅程将在使用 Refresh Token 时被调用,并实际检查在 Graph API 调用中更新的 refreshTokenLastValidFrom 时间戳。

    关于azure-active-directory - 撤销 Azure AD B2c 用户的登录 session 不适用于 native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63475227/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com