如何在 Sign In With Apple 中验证 realUserStatus 值

Posted

技术标签:

【中文标题】如何在 Sign In With Apple 中验证 realUserStatus 值【英文标题】:How to verify realUserStatus value in Sign In With Apple 【发布时间】:2020-04-05 22:12:23 【问题描述】:

首次使用 Sign in with Apple 登录时,它会在 ios 客户端中返回值 realUserStatus 作为 ASAuthorizationAppleIDCredential 的一部分。该值表示 Apple 是否确信用户是真实的(例如,它是一个脚本)

我的问题是如何在我的后端身份验证系统中验证realUserStatus 的值? 因为realUserStatus返回给iOS客户端,客户端应该告诉我的服务器它是否是机器人!我怎么知道它是否不仅仅是一个脚本并告诉服务器它是真实的?

编辑(附加说明): 在 Apple 的文档中,它说“您可以跳过您的应用程序通常使用的任何其他欺诈验证检查或 CAPTCHA。”但是当我们使用 CAPTCHA 时,提供者可以验证响应,这是 Apple 不做的事情,或者我在任何地方都找不到如何做!

【问题讨论】:

【参考方案1】:

我刚刚与 WWDC 在线实验室的一位 Apple 工程师通话。

所以从 iOS 14 开始,realUserIndicator 包含在身份令牌中,可以与服务器进行验证。

对于 iOS 13,他们没有解决方案。

【讨论】:

【参考方案2】:

此标志用作基本的首次验证,旨在供您的前端使用。仅当用户首次在您的应用中使用 Sign in with Apple 时,识别服务器才会返回此值。

如果您想在后端验证用户,您应该使用用户身份令牌 (JWT)。当用户登录时,您可以从 Apple 的服务器获取它(在此处阅读:https://developer.apple.com/documentation/signinwithapplerestapi/authenticating_users_with_sign_in_with_apple)。

如果您想在即将到来的会话中验证用户,作为现有用户(无需用户每次都登录),您应该开发自己的系统,用于创建、保存和验证令牌。另一种选择是使用支持苹果登录的 Firebase 身份验证框架。

【讨论】:

谢谢,那么 realUserStatus 不是完全多余的吗?在 WWDC 中,他们说这是一种帮助我们捕捉脚本与真实用户的方法。但是如果我的后端无法验证 realUserStatus 值,那么它怎么可能帮助我检测用户是否真实。 而且 Firebase Auth 不会对 realUserStatus 做任何事情。【参考方案3】:

如果您将获取的用户信息发送到应用服务器(您的后端),您可以通过身份令牌与休息服务验证用户。

苹果文件说: 在您的应用收到用户信息后,您可以向服务器验证他们关联的身份令牌,以确认令牌没有过期,并确保它没有被篡改或重播到您的应用。有关检索身份令牌的信息,请参阅使用 Apple 登录对用户进行身份验证。

https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api/verifying_a_user

【讨论】:

JWT 仅包含电子邮件地址。与真正的用户指标无关。 他们为 iOS 14+ 添加了 realUserIndicator。

以上是关于如何在 Sign In With Apple 中验证 realUserStatus 值的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Mailgun 以与 Sign in with Apple 和 Apple 的中继服务一起使用?

在为 iOS 编译时,如何让 Unity 自动添加 Sign In With Apple 功能?

C# Sign In With Apple苹果登陆后端验证

Sign in with Apple(苹果授权登陆)服务端验证

使用 Apple 登录按钮标题始终显示“SIGN_IN_WITH_APPLE”

不允许重定向 url localhost 和 127.0.0.1 时如何在 Unity 中从 Sign in with Apple 获取代码