【问题标题】:MSAL and Caching accesstoken on Xamarin FormsXamarin 表单上的 MSAL 和缓存访问令牌
【发布时间】:2021-12-06 07:47:57
【问题描述】:

我们有一个 Xamarin Forms 代码库,自 2019 年 1.1.4 以来一直在使用 MSAL,我们现在使用的是 4.22.0。

该应用始终保留其自己的访问令牌副本,该副本以单选或交互方式获得,并且它是在访问各种 B2C 安全 API 时使用的该应用的副本。

它仅在初始登录或检测到 401 时调用 AcquireTokenSilentAcquireTokenInteractive

我们相信我们在存储令牌方面存在问题,据我所知,MSAl 无论如何都会缓存访问令牌本身。查看文档和示例,我们应该在需要令牌时调用 AcquireTokenSilent 并处理 MSALUIRequiredException 以调用 AcquireTokenInteractive。

这是否正确,MSAL 是否缓存了访问令牌?

当我们构建 PublicClientApplication 时,我们不调用当前调用 WithIosKeychainSecurityGroup。这是令牌缓存在 iOS 上工作的先决条件吗?

PublicClientApplicationBuilder
                        .Create(ClinicalServicesSettings.ClientID)
                        .WithB2CAuthority(ClinicalServicesSettings.Authority)
                        .Build()

【问题讨论】:

    标签: xamarin.forms msal microsoft-identity-platform


    【解决方案1】:

    您应该使用推荐的 AcquireTokenSilent 调用模式,捕获 MsalUiRequiredException 并调用 AcquireTokenInteractive。

    MSAL 会在移动应用程序中为您处理缓存。在 AcquireTokenSilent 期间,MSAL 将检查缓存以查看是否存在有效帐户以及用户是否可以在不显示 UI 的情况下静默登录。如果刷新令牌已过期,或者已对帐户应用了条件访问策略(如 MFA),则会抛出 MsalUiRequiredException。

    如果您想在 iOS 上属于同一个 TeamId 的应用之间共享令牌,您需要使用 WithIosKeychainSecurityGroup,它设置了 iOS 密钥链安全组。 TeamId 附加到安全组,默认情况下使用安全组 com.microsoft.adalcache,这是 MSAL 在身份验证后缓存令牌的地方(无论它是在应用程序中发生还是通过身份验证器发生 - 但是通过身份验证器的身份验证不适用于B2C)。这使令牌能够在应用之间共享,并且与 ADAL 和 MSAL iOS 应用共享。

    【讨论】:

    • 移动端 MSAL 中的缓存功能是否一直存在?
    • 是的。 iOS 的钥匙串和 Android 的共享首选项。
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多