我的用例是,一旦用户登录到我的应用程序,当我从我的应用程序向我的自定义服务器进行端点调用时,我使用登录产生的 Oauth 令牌对调用者进行身份验证。例如,我以这种方式使用Google 登录。
此方法(例如,使用 Google 登录)有几个有用的属性:
更新的令牌会在客户端应用程序上自动创建。
我的自定义服务器可以使用 Google 的端点轻松验证令牌的有效性。
初始令牌验证可以在端点请求处理的早期进行 - 无需访问自定义服务器数据库(如https://github.com/IBM-Swift/Kitura-Credentials中的样式)。
我的问题是:鉴于我们被告知必须将 Apple 登录合并到我们的 iOS 应用程序中(如果我们提供通用登录设施),我如何使用我的自定义服务器进行端点身份验证?
我看到了两种选择,我都不太喜欢。
首先,我可以让我的客户端应用程序向我的服务器发送 Apple 登录 id_token 并忽略 exp(到期)字段。我可以定期(显然,每天不超过一次)重新生成 id_token并将其发送回我的客户。我不喜欢这个想法,既因为忽略了令牌的到期,也因为需要定期将令牌从服务器发送到客户端。(我的应用程序使用多个登录系统,这只会造成额外的困难)。
其次,我可以让我的客户向我的服务器发送一个 Apple 登录刷新令牌。当然,我的服务器需要最初生成该刷新令牌并将其发送回客户端。我比第一个想法更喜欢这个想法。我在自定义服务器中的初始令牌验证将需要访问其数据库以查找与此令牌匹配的。我通常不能使用 Apple 端点——因为,Apple 显然会再次限制这种验证。
此外,我不太喜欢我的自定义服务器最多只能每天检查一次令牌有效性的想法。如果用户撤销应用程序的凭据,我希望我的自定义服务器能够相对较快地停止代表用户操作。
想法?
2019 年 10 月 5 日——更新到上面的第一个替代方案。在实际使用https://developer.apple.com/documentation/signinwithapplerestapi/generate_and_validate_tokens进行刷新令牌验证时,我发现它实际上并没有生成更新的 id 令牌。它正在生成一个访问令牌(但 Apple 没有定义它的用途),并正在验证刷新令牌。因此,无法将更新的 id 令牌发送到客户端 iOS 应用程序。因此,使用第一种替代方法,不能使用 id 令牌的到期日期。
19 年 10 月 10 日——更新:我写了一篇关于这个主题的博客文章——https: //medium.com/@crspybits/apple-sign-in-custom-servers-and-an-expiry-conundrum- d1ad63223870
20 年 8 月 6 日--更新:关注博客文章以及可能的前进路径,来自 Apple 的待定详细信息:https ://medium.com/@crspybits/part-ii-apple-sign-in-custom-servers-and-一个到期的难题-b3e9735dc079