问题标签 [apple-sign-in]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
737 浏览

android - 为什么 Firebase pendingAuthResult 返回 null?

我正在尝试使用 Firebase 身份验证实现Apple 登录。我正在关注firebase/quickstart-android示例。

我的登录片段覆盖onStart()以检查任何未决结果:

还有一个启动登录流程的按钮:

viewModel 从存储库中调用以下方法:


官方手册说:

使用此方法登录会将您的 Activity 置于后台,这意味着它可以在登录流程中被系统回收。

因此,我在完成 Chrome 中的登录流程的同时,通过在 Android Studio 中终止应用程序来开始测试挂起的结果。一旦我返回应用程序,就会onStart()调用 ,但pendingAuthResult始终为空。

为了让它更有趣,当我重新启动应用程序时,我已登录。然后如果我注销并再次输入登录片段,现在有一个待处理的结果,我会收到Successful login, pending. 最重要的是,未决结果不会消失。如果我离开登录片段并返回,待处理的结果仍然存在,我会收到另一个Successful login, pending.

我什至测试了firebase/quickstart-android样本本身,它也有完全相同的问题。

这个问题的可能原因是什么?我正在使用firebase-auth:19.2.0.

0 投票
1 回答
5516 浏览

php - Apple 登录“invalid_client”,使用 PHP 和 openSSL 签署 JWT 进行身份验证

我正在尝试使用此将 Apple 登录实现到 Android 应用程序中。文档中描述了主要流程:该库在Android端返回一个授权码。此授权代码必须发送到我的后端,然后再将其发送到 Apple 服务器以取回访问令牌。

这里这里所述,为了获得访问令牌,我们需要向 Apple API 发送参数列表、授权码和签名的 JWT。特别是,JWT 需要使用 ES256 算法使用私有 .p8 密钥进行签名,该密钥必须从 Apple 开发人员门户生成和下载。苹果文档

这是我的 PHP 脚本:

问题是苹果的回应总是:

在这里阅读似乎问题可能与生成对 Apple 不正确的签名的 openSSL 有关(“ OpenSSL 的 ES256 签名结果是 DER 编码的 ASN.1 结构(它的大小超过 64)。(不是原始 R | | S 值) ”)。

有没有办法使用 openSSL 获得正确的签名?

p8 格式是 openssl_sign 和 openssl_pkey_get_private 函数的正确输入吗? (我注意到如果在jwt.io中使用提供的 .p8 密钥来计算签名的 jwt,则它不起作用。)

在 openSSL 文档中,我读到应该提供 pem 密钥,如何将 .p8 转换为 .pem 密钥?

我还尝试了一些 PHP 库,它们基本上使用上述相同的步骤,例如firebase /php-jwtlcobucci/jwt,但 Apple 的响应仍然是“无效客户端”。

预先感谢您的帮助,

编辑

我试图从等式中完全删除 openSSL。使用从 .p8 生成的 .pem 密钥,我使用 jwt.io 生成了一个签名的 JWT。使用此签名的 JWT,Apple API 会正确回复。在这一点上,我几乎可以肯定这是一个 openSSL 签名问题。关键问题是如何使用 PHP 和 openSSL 获得正确的 ES256 签名。

0 投票
1 回答
2180 浏览

ios - 使用 Apple 登录 - 在不显示登录 UI 的情况下验证后续调用(刷新身份验证令牌)

每当我启动我的应用程序时,我想确保苹果登录仍然有效,但我也希望能够向我的服务器证明它。
成功登录后,我可以ASAuthorizationAppleIDProvider.getCredentialState用来确定我的凭据对于后续登录是否仍然有效。
这工作正常,但无法向我的服务器证明此过程已成功执行,任何使用我的服务器 API 的人都可以告诉服务器不要担心,服务器将无法判断它是否是真正的客户端或不。
服务器还可以使用刷新令牌来验证用户是否仍然有效,方法是发出一个新的访问令牌(Apple 说每天不超过一次,但现在还可以),但这也无济于事,因为我不希望密钥出现在客户端应用程序中,此外,即使我从客户端获得了新的访问令牌 - 服务器暂时无法将其用于任何事情,因为目前不存在这样的 API任何带有访问令牌的东西。

我需要的是一个新的身份验证令牌,但是 - 当ASAuthorizationController.performRequests()使用 Apple ID 请求调用时 - UI 再次显示,而不仅仅是ASAuthorizationControllerDelegate使用新的授权令牌调用。
我还尝试refresh在第二次登录尝试中将请求操作设置为:

同样的结果,UI 仍然显示。
有没有办法在不显示 UI 的情况下使用 Apple ID 重新进行身份验证,并获得某种令牌,服务器可以使用它来验证登录的真实性?
请不要建议超出范围的方法,例如在向服务器提供初始证明后涉及我自己的登录机制并让服务器从那时起使用刷新令牌的方法 - 我可以自己想出这些解决方案- 我正在寻找苹果登录方法的解决方案。

0 投票
1 回答
2128 浏览

ios - 在应用程序 RTL 中实现不同语言的 Apple 登录按钮

我的应用程序有 2 种语言英语和阿拉伯语,用户第一次进入应用程序时会选择它们。我不使用设备语言环境。

在 RTL 语言的情况下,我还必须手动将文本“Continue with Apple”更改为阿拉伯语,并将苹果徽标移动到文本的右侧。

参考图片

显示使用苹果按钮登录的登录屏幕

0 投票
0 回答
187 浏览

ios - 新 Apple 登录与 Google 登录冲突,生成 2 个用户帐户

我遇到的问题是,以前通过 Google 登录或我的应用程序上的电子邮件注册的用户无法使用 Apple Sign In 登录到同一帐户(即使未隐藏电子邮件)。

即使身份验证令牌是分开处理的,Apple 和 Google/Firebase,我们的用户集合中的同一电子邮件也无法合并(保留现有用户帐户并为现有帐户使用新令牌)。这会产生 2 个帐户:现有帐户和新帐户,这与新的 Apple 登录存在问题。

有没有人在他们的 iOS 应用程序中遇到过这个问题,并且随着即将到来的春季 Apple 登录要求,他们如何处理 2 个令牌并合并新旧帐户?

我已经能够在 Apple 测试应用程序中重现这些结果:https ://developer.apple.com/documentation/authenticationservices/implementing_user_authentication_with_sign_in_with_apple 。当用户当时使用 Apple 登录并共享她的电子邮件地址时,我能够接收用户的电子邮件,但是当用户尝试再次登录时,我无法接收该电子邮件。似乎是苹果的疏忽?

0 投票
0 回答
602 浏览

wordpress - 无法验证 Apple 私人电子邮件中继服务的域

语境:

我正在开发一个使用苹果登录的 iOS 应用程序。此功能使用户能够隐藏他们的电子邮件并使用匿名电子邮件进行注册。为了能够向这些电子邮件地址发送信息,苹果要求您注册您的电子邮件和发送电子邮件的域。

我按照以下 2 个指南注册和验证域:

需要注意的重要事项:

  • 正确遵循我自己制作 .well-known 文件夹所需的说明
  • 域可公开访问
  • 我确实确保我已添加v=spf1 include:_spf.google.com ~all到我的 DNS 记录中
  • 我已经有一个 Let's Encrypt SSL 证书

环境:

在 AWS Lightsail 上运行的 Wordpress

问题

当我单击验证按钮时,我收到一条 1 行错误消息:

域验证失败

我不确定如何继续验证我的域。

我已采取的故障排除步骤:

  1. 验证 www.example.com 以防它被重定向,而不是验证 example.com
  2. 将 apple-developer-domain-association.txt 移动到根目录而不是 /.well-known
  3. 使用 Safari 而不是 Chrome 进行验证
  4. 下载新的验证文件
  5. 向 Apple 支持发送电子邮件(他们刚刚发送了我在他们的开发文档中找到的相同指南)
  6. 使用SSL Labs检查以确保我有一个受支持的 TLS 1.2 密码(我有 1 个,我需要全部吗?)

网络检查工具中的响应:

0 投票
0 回答
45 浏览

ios - 如何在超过 5 个应用程序上与苹果共享登录?

在尝试添加使用苹果登录以满足应用商店要求时,我遇到了障碍。

在尝试按照苹果登录指南进行操作后似乎只有 5 个应用程序可以链接到苹果登录。

我的用例在应用商店中有超过 5 个应用。假设我们有 26 个应用程序,A...Z

这是所需的行为:

  1. 有人使用 apple on 登录App A
  2. 我在我的 API 上验证该令牌,并为他们创建一个用户,并以某种方式与该苹果令牌相关联。
  3. 同一个人使用 Apple 登录App B
  4. 我在我的 API 上验证了令牌,并且可以从第 1 步和第 2 步中看出他们是同一个用户
  5. 此过程适用于我的任何应用程序A...Z

Apple 用于配置 Apple 登录密钥的设置仅允许最多 5 个应用程序在一个组中。据我了解,这将阻止我的用例使用超过 5 个应用程序。

在配置苹果登录时,我很难找到任何人谈论分组应用程序。

我怎样才能让超过 5 个应用程序按照描述工作?

0 投票
1 回答
2201 浏览

firebase - AppleSignIn(与 Firebase 和 Expo)在本地工作,但不能独立工作

我在我的 Expo 应用程序上实现了 signinWithApple 按钮,当我使用 Firebase 身份验证选项卡中的host.exp.ExponentonServices ID进行 Apple 登录时,它在本地运行良好。

host.exp.Exponent但是,当我创建一个独立的应用程序并使用 TestFlight 对其进行测试时,无论我使用、nothing 还是my specific app service IDon ,它都不再起作用Services ID

我在这里想念什么?

我的代码:

编辑 :

我设法通过在firebasemy bundle identifier的字段上使用(这也是我的应用程序ID)使其工作。the Service ID

错误代码 :

错误:ID 令牌 [##.app-videos] 中的受众与预期的受众##.signin 不匹配。

但现在我网站上的 Apple 登录中断了。my specific app service ID当我将 Service Id 字段更改为(在Identifiers>中找到)时,我设法使其工作Services IDs

所以我被一个需要一些东西的应用程序和一个需要另一个东西的网站所困。这是为什么?

当我重建我的应用程序时,我是否应该做一些具体的事情,以便考虑到我对 mu 标识符所做的更改?我用这个,还不够吗?

expo build:ios --clear-provisioning-profile

0 投票
0 回答
343 浏览

ios - 以横向显示 Apple 登录视图?

由 ASAuthorizationController 呈现的 Apple Sign In 视图仅以纵向模式显示,但我更愿意像我的应用程序一样以横向模式显示它。

代码:

0 投票
1 回答
1500 浏览

ios - 使用 Apple ID 登录时显示无效的 responseType

我需要在 Android 应用程序中使用 Apple 功能实现登录,所以我按照文档的说明进行操作。

这是我的参数:response_type=id_token&client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&scope=email%20name&response_mode=form_post

但是 OAuth 页面显示 'invalid_request' 并带有描述:'Invalid responseType'。

他们说如果response_type可以id_token,在那种情况下,response_mode应该form_post这样我就跟着他们了。但我不知道为什么我无法访问 OAuth 页面。

这是我用来访问 OAuth 页面的 uri:https ://appleid.apple.com/auth/authorize?response_type=id_token&client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&scope=email%20name&state=[STATE]&response_mode=form_post

response_type什么时候code,我可以访问 OAuth 页面并成功登录。