如何在 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 功能?
Sign in with Apple(苹果授权登陆)服务端验证
使用 Apple 登录按钮标题始终显示“SIGN_IN_WITH_APPLE”
不允许重定向 url localhost 和 127.0.0.1 时如何在 Unity 中从 Sign in with Apple 获取代码