我正在使用服务器中的 AppleAuth npm软件包在使用Apple登录过程中向Apple的服务器提交令牌请求。 (这是基于pub.dev中sign_in_with_apple package随附的示例服务器代码而来的)我没有提交授权代码以获取我的首次访问和刷新令牌的问题。
但是,当尝试测试我的应用如何获取新的刷新令牌时,当我将grant_type
设置为refresh_token
的情况下向https://appleid.apple.com/auth/token提交POST请求时,得到的响应是与将grant_type
设置为authorization_code
有所不同。
我查看了该程序包的源代码,对于它的AppleAuth(myConfig).refreshToken(myRefreshToken)
(<-伪代码,大声笑),POST有效负载中唯一的区别是:
{
grant_type: 'refresh_token', // instead of grant_type: 'authorization_code'
refresh_token: refreshToken, // instead of code: authorizationCode
... // other params
}
尽管带有授权码的初始请求同时返回访问令牌和刷新令牌,但由于某种原因,刷新令牌请求仅返回访问令牌。我真的不认为是导致错误的软件包,也看不出我的代码将如何成为源,因为上面的代码是唯一的区别。
我尝试在新的刷新令牌请求中传递它返回的访问令牌,以测试将来在需要时可以获取新的刷新令牌,但它返回400状态错误。
我在这里想念什么吗?是否有刷新令牌请求不返回新的刷新令牌的原因?还是我完全缺少有关流程/流程应该如何工作的信息?我正在尝试执行该过程的“每天检查一次刷新令牌,以确认用户在Apple的服务器上仍然保持良好的信誉”。
我现在真的很难做。我可以在数据库中保存identity_token.sub字段,以检查我的用户是否已登录,但是我当然想确保用户的apple ID对apple仍然有效,并且他们没有撤消访问权限。可能是因为我太早尝试获取新的refresh_token了,Apple只返回了access_token吗?
哦,该应用程序本身就是Flutter应用程序,我正在iPhone 11上测试所有这些内容,因此它不是Android / Web流。
答案 0 :(得分:1)
刷新令牌授予响应中是否获得新的“滚动/旋转”刷新令牌通常是特定于供应商的:
在令牌处理方面,客户端应类似于this sample of mine中的saveTokens方法来更新其令牌。
我没有在Apple上使用Sign In,但我怀疑按以下步骤进行将是最简单的解决方案: