【问题标题】:Android Custom Authenticator Allow Access ScreenAndroid 自定义身份验证器允许访问屏幕
【发布时间】:2012-12-18 07:51:47
【问题描述】:

当通过 Google 的身份验证器登录时,允许访问屏幕 (GrantPermissionActivity) 会针对每个应用 (uid) 的每个帐户提示一次,但是没有记录可以选择在哪里为自定义 3rd 方身份验证器显示该屏幕。

有人知道是否有办法这样做吗?

我尝试插入自定义检查并模仿 GrantPermissionActivity,但问题是 AuthToken 已缓存,因此我无法弄清楚如何在第三方应用程序上强制执行此操作,因为 getAuthToken 将简单地通过自定义代码传递缓存的令牌。

注意这不是同一个问题:How do you force AccountManager to show the "Access Request" screen after a user has already allowed access?

【问题讨论】:

    标签: android accountmanager


    【解决方案1】:

    我没有完整的答案给你,但也许我可以在你的路上帮助你。

    查看getAuthToken 实现时,您可以看到如果身份验证器使用customTokens,则会自动授予权限。 AuthenticationDescription 的文档还提到,如果使用自定义令牌,“Authenticator 会处理自己的令牌缓存和权限屏幕”。因此,如果您是这种情况,我认为不可能出现此屏幕。

    我尝试插入自定义检查并模仿 GrantPermissionActivity,但问题是 AuthToken 被缓存...

    如果您使用invalidateAuthToken 使令牌无效,则应将其从缓存中清除。只需记住将要使其无效的令牌传递给方法(请参阅AccountManager: invalidateAuthToken does not invalidate the token)。

    【讨论】:

      【解决方案2】:

      我想我已经找到了一个很好的解决方案,但这可能不是 Google 允许屏幕的工作方式。

      在 Authenticator 中,你会得到调用包,因为 AccountManager 会验证应用的 UID/PID,所以它不能被欺骗。您将调用包用作令牌类型的一部分以及应用程序的安装日期(可选,通过使用包管理器找到),这样每个应用程序的令牌将被单独缓存。

      如果token类型中不包含调用包的包名,则不返回token。

      对于每种身份验证令牌类型,您还验证客户端密钥与客户端密钥的关系。如果这是客户第一次要求每个自定义帐户类型的每个帐户的密钥,您将只返回允许访问屏幕意图。

      请注意,如果您想将应用列入白名单,您也可以基于每个帐户令牌类型进行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2015-05-22
        • 2020-04-01
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多