React native Expo:WebBrowser.openAuthSessionAsync和相关调用即使在浏览器会话过期时也会跳过用户输入

React native Expo:WebBrowser.openAuthSessionAsync和相关调用即使在浏览器会话过期时也会跳过用户输入,react-native,oauth,salesforce,expo,React Native,Oauth,Salesforce,Expo,这是一个问题的摘要(它已关闭,但我已要求重新打开): 无论是否使用AuthSession.startAsync,此问题都会发生, 中的iOS上的AppAuth.authAsync或WebBrowser.openAuthSessionAsync 本地开发和发布(世博会管理)。我没试过 还没有独立构建 复制步骤 用户按下“登录”按钮,(应用程序调用上述方法之一启动与Salesforce oauth提供商的身份验证会话) 用户成功输入凭据 应用程序通过oauth重定向并将用户返回到我们的应用程序,我们

这是一个问题的摘要(它已关闭,但我已要求重新打开):

无论是否使用
AuthSession.startAsync
,此问题都会发生, 中的iOS上的AppAuth.authAsync或WebBrowser.openAuthSessionAsync 本地开发和发布(世博会管理)。我没试过 还没有独立构建

复制步骤

  • 用户按下“登录”按钮,(应用程序调用上述方法之一启动与Salesforce oauth提供商的身份验证会话)
  • 用户成功输入凭据
  • 应用程序通过oauth重定向并将用户返回到我们的应用程序,我们获得了访问令牌。 用户按下“注销”按钮(应用程序调用令牌的吊销端点,然后调用服务器端点删除给定帐户引用的任何浏览器cookie会话)
  • 应用程序导航到登录屏幕
  • 用户再次按下“登录”(应用程序从上面调用相同的方法以再次启动与Salesforce oauth提供商的身份验证会话)
  • 应用程序不会打开登录页面,而是使用访问令牌将自身重定向回来,就好像用户已成功输入其凭据一样,即使浏览器存储的任何cookie/会话数据都应无效并需要登录
  • 预期行为

    步骤1-5与预期一致。第六步应该是

  • 应用程序在未经验证的状态下重定向到Salesforce oauth提供商登录页面(即以前存储的cookie或会话数据无效)
  • 用户需要重新输入其凭据
  • 如果凭据正确,oauth流将接管并将用户重定向到应用程序中
  • 实际行为

    按照最初的步骤,甚至不要求用户输入其凭据(步骤6):

  • 应用程序不会打开登录页面,而是使用访问令牌将自身重定向回来,就好像用户已成功输入其凭据一样,即使浏览器存储的任何cookie/会话数据都应无效并需要登录
  • 可复制演示

    这段代码是在一个私有的repo中,所以我不能分享它的详细信息,但它是一个非常标准的oauth流,看到它发生在从顶部开始的所有三个方法调用中,我觉得这可能是由于
    WebBrowser.openAuthSessionAsync
    实现中的某个原因。我已看到赞成票。我的理解是,这(SFAuthenticationSession)是expo的WebBrowser和上述包装器(AppAuth和AuthSession)用于oauth交互的浏览器。我还看到,它提到它是一次性登录的,这也许可以解释为什么它会保留任何会话数据,并在不直接从用户那里获取凭据的情况下跳转到重新验证的结论,但存储cookie而不验证它似乎没有帮助,这似乎是最终的结果

    注释

    本质上,这使得用户无法注销我们的应用程序,因为我们无法控制的系统浏览器正在跟踪他们的身份验证,尽管会话值对服务器不再有效

    我看到其他人正在寻找从系统浏览器中清除cookie的方法,这可能与此问题有关,但似乎无法以任何方式访问auth会话的浏览器cookie。我们需要找到解决问题的办法


    我希望用户能够注销,然后当他们再次登录时,他们应该再次输入他们的凭据。有没有人想到这是怎么可能的?

    我也遇到了同样的问题,但是使用了
    useAuthRequest
    hook。我发现它使用了一个名为
    prompt
    的AuthRequestConfig选项,当我将该选项设置为
    prompt.Login
    时,我能够再次获得登录屏幕。我也尝试了该选项,以及
    select\u account
    选项。所有这些都是在登录状态下打开Salesforce应用程序,这比立即重定向回我们的react本机应用程序更糟糕。我也遇到了同样的问题,但是使用了
    useAuthRequest
    hook。我发现它使用了一个名为
    prompt
    的AuthRequestConfig选项,当我将该选项设置为
    prompt.Login
    时,我能够再次获得登录屏幕。我也尝试了该选项,以及
    select\u account
    选项。所有这些都是在登录状态下打开Salesforce应用程序,这比立即重定向回react本机应用程序更糟糕。