刷新 safariViewController 导致 OAuth2 失败

Posted

技术标签:

【中文标题】刷新 safariViewController 导致 OAuth2 失败【英文标题】:Refreshing safariViewController causes OAuth2 to fail 【发布时间】:2018-01-31 18:23:27 【问题描述】:

我对有问题的库(Keycloak)提出了类似的问题,但我觉得它实际上可能与库外的代码有关。

我正在尝试使用带有 Aerogear OAuth2 的 Safari 视图控制器,以便通过 Google 登录。

但是,在尝试登录时,如果您在登录过程中尝试刷新,我会收到来自 Keycloak 的错误 - 这是“无访问令牌”的访问管理服务。

let keycloakHost = ServerConfigurator.sharedInstance.keycloakUrl

config = KeycloakConfig(
    clientId: "company-name",
    host: keycloakHost,
    realm: "master",
    isOpenIDConnect: true)

config.webView = .safariViewController

config.webViewHandler = self.webViewHandler
oauthModule = KeycloakOAuth2Module(config: config, session: KeycloakClient.session)

我很难找到为什么 Safari 视图控制器刷新会导致这样的错误。

可能与新会话有关吗?由于它仅在刷新时发生并且仅在 Safari 视图控制器中发生,我的一部分感觉就像我对视图控制器进行了一些错误配置。

【问题讨论】:

【参考方案1】:

您好,我遇到了类似的问题,但我通过 keycloak 客户端解决了

在我的领域 - 客户端 - Yourclient - 设置搜索访问类型并公开

再试一次就可以成功登录

【讨论】:

如何在配置中进行设置? 在你的keycloak客户端中,路径如下:Realm - client - Yourclient - Settings search Access Type and put public

以上是关于刷新 safariViewController 导致 OAuth2 失败的主要内容,如果未能解决你的问题,请参考以下文章

区分来自 MobileSafari 与 SafariViewController 的请求

如何在 SafariViewController 中隐藏完成按钮和搜索栏

Swift SafariViewController 动画

使用 SafariViewController 打开 url 时如果不成功则处理完成

如何从 SafariViewController 快速获取文本到我们的应用程序?

在 UIWebview 之类的 ViewController 中使用 SafariViewController