我正在尝试使用 tiktok(登录工具包)登录我的应用程序。我在 Tiktok 中创建了一个基于网络的应用程序。提供了正确的重定向域。应用程序“正在生产中”。
我可以重定向到
titok.com
,但是当我单击授权选项时,出现以下错误,
{"data":{"description":"Parameter error. Please ensure there are no unnecessary parameters in query or payload.","error_code":10002,"captcha":"","desc_url":""},"message":"error"}
如有任何帮助,我们将不胜感激。
问候, 丽塔
我尝试使用 tiktok 凭据连接登录, 我正在使用omniauth-tiktok gem。下面是配置
provider :tiktok, "<<Client ID>>", "<<Client Secret>>",
scope: "user.info.basic",
token_params: { parse: :json }
我期望获取用户信息和视频列表。
我们已经构建了您用于使其发挥作用的策略的分支,请参阅 我们的 github 存储库
此错误发生在 OAuth2 协议的授权阶段,有关详细信息,请参阅 oauth2 文档中的4.1 授权授予部分。
Tiktok 的错误是由于 OAuth2 协议实施不当造成的。 OAuth2 协议规定,当您提供与其他服务的连接时,您需要一个标识符,也称为客户端标识符。
2.2。客户标识符
授权服务器向注册的客户端颁发客户端 标识符——代表注册的唯一字符串 客户提供的信息。客户端标识符不是 秘密;它暴露给资源所有者并且不得使用 单独用于客户端身份验证。客户端标识符是唯一的 授权服务器。
此客户端标识符 client_id 是“必需的”,如协议第 2.3.1 节中所指定。您可以在RFC 6749查看更多信息 您可能已经开始了解了,Tiktok 不使用 client_id 通过 OAuth2 协议对用户进行身份验证,正如
doc中所述用于获取用户访问令牌。
如果我们仔细查看检索 access_token
所需的参数,我们不会看到“client_id”。
client_id
是协议中的必需参数,ruby gem oauth2 通过自动将 client_id 发送到 Tiktok 来管理
授权阶段。抖音不管理client_id,所以返回参数错误,说查询中有不需要的参数。 这就是为什么你需要修改OAuth客户端配置以便“不尊重协议”,从omniauth策略本身来看,这是一件坏事。但由于我们必须找到解决方案,我们分叉了原始的omniauth-tiktok gem,添加了 2 个允许不将 client_id 发送到 Tiktok 的东西:
A
client_options: { auth_scheme: :basic_auth }
OAuth2::Authenticator
的 apply
自动添加 client_id 的方法。自定义 build_access_token
redirect_uri
替换 client_secret
(这也是不需要的),以便将正确的参数发送到 Tiktok。
我们发现omniauth-tiktok 1.0.0和omniauth 2.1.0使用的是OAuth 1.4.4版本,在OAuth的最新版本中,您可以在
get_token
access_token
请求之前执行,因此使用最新版本的 OAuth2 gem 可以在向 tiktok 发送请求之前执行更正参数的代码块。我们尝试了 Monkeypatch OAuth2::Authenticator
apply
方法,该方法会自动添加 client_id
并且它有效,但我们更喜欢上面描述的方法,因为它对其他代码片段没有影响。
的分支迁移了旧 API。由于 Tiktok 更改了他们的 API,他们在 OAuth 回调阶段设置了更严格的读取参数的方式。
我们修改了通过猴子补丁 OAuth2::Authenticator 的方法来摆脱“client_id”的方法apply(params)
。这个猴子补丁有一个特殊的 auth_scheme for tiktok,不发送
client_id
。我们通过其他omniauth策略进行身份验证进行了测试,它似乎有效,但众所周知,猴子补丁可能很危险并导致错误。