node.js - 在 nodejs 后端上护照苹果无法解释的 invalid_client - 使用带有新凭据集的干净示例存储库
问题描述
我已经克隆了https://github.com/ananay/passport-apple-example并将配置替换为:
clientID: "com.myname.web",
teamID: "myteamid",
callbackURL: "https://myurldev.com/auth/apple/redirect",
keyID: "mykeyid",
privateKeyLocation: path.join(__dirname, "../apple-key.p8")
我还在我的机器上添加了 SSL 证书并使用 https 启动服务器,一切正常并且被我的浏览器识别。我还在端口 443 上启动应用程序并使用我的主机文件 myurl.dev.com -> 127.0.0.1 进行代理。
我为 facebook、google 和 microsoft 设置了相同的身份验证设置,一切正常。
我有:
- 创建了一个新的 APP 标识符并为其启用了使用 Apple 登录,将其命名为:com.myname.dev
- 创建了一个新的 SERVICE 标识符并启用了 Sign in with apple,将其命名为:com.myname.web
- 在服务标识符 com.myname.web 上的“回复 URL”中添加了“https://myurldev.com/auth/apple/redirect”
- 将我的应用标识符 com.myname.dev 设置为我的服务要分组的主要应用标识符。
- 创建了一个私钥并启用了使用苹果登录,界面确认存在与创建密钥的 com.myname.dev 捆绑的分组 ID com.myname.web。
- 我已使用 console.log 确认私钥确实位于作为参数传递的路径中。
- 将 .p8 文件转换为 base64,然后再转换回 UTF-8 以尝试将字符串用于 privateKeyString
- 过去多次使用passport-apple成功实现Apple Oauth
这一次,出于某种原因,auth 根本不起作用。
如果我将 clientID 设置为 APP 标识符,而不是服务,我会得到
invalid_request
Invalid web redirect url.
代替invalid_client
非常感谢任何有关调试的建议。谢谢你。
编辑#1:
我对 passport-apple 包进行了更深入的研究,以确定是否有任何内容违反苹果关于令牌生成的文档,但流程从未到达那部分,这表明苹果控制台中的实际配置出现问题以及我正在尝试的内容用于我的项目。
编辑#2 我创建的应用程序 ID 中的 2 个总是抛出“错误的重定向 uri”,因为它们不是服务 ID,所以我无法配置 redirect_uri,如果我将 undefined 作为 redirect_uri 传递,这将更改为“必需”。
无论我是否为 redirect_uri 传递了未定义或良好的值,其中一个应用程序 id 只会抛出无效的 client_id。
编辑#3 通过 OAuth 代码流程进行了完整的原版操作,并且刚刚创建了一个 url 并重定向了用户,使用此方法失败与使用 passport-apple 模块时发生的情况一致。
const url = new URL("https://appleid.apple.com/auth/authorize");
url.searchParams.append("state", "fdbd287b1f");
url.searchParams.append("response_type", "code");
url.searchParams.append("scope", "name email");
url.searchParams.append("response_mode", "form_post");
url.searchParams.append(
"redirect_uri",
"https://raiseitupdev.com/auth/apple/redirect",
);
url.searchParams.append("client_id", "com.myname.web");
return res.redirect(url.toString());
解决方案
[这里是图书馆的创建者。]
它是否也停止了开发工作?我觉得这是一个配置错误,因为实际情况正在我的网站上运行:
https://passport-apple.ananay.dev
请跟进这个 Github 问题。谢谢! https://github.com/ananay/passport-apple/issues/23
推荐阅读
- amazon-web-services - 亚马逊红移中的数据类型转变
- asynchronous - 在 F# 异步块中捕获内部异常
- elasticsearch - 无法从 FluentBit 与 Elasticsearch 端点通信
- c++ - 如果模板解析失败,C++ 强制编译器错误
- vba - 大型数据集中每个类别的唯一 ID 数和值总和
- php - Laravel - 使用不同渠道为每个用户存储通知设置
- reactjs - 如何从 Axios 异步调用返回实际数据?
- typescript - 使用 lodash 中的 mapKeys 后,我如何告诉 TypeScript 什么类型的东西?
- java - 在 for 循环中检查自定义对象的值
- java - 在 Java 中将整数转换为日期