TikTok Oauth - 参数错误(登录套件)

问题描述 投票:0回答:1

我正在尝试使用 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 }

我期望获取用户信息和视频列表。

ruby-on-rails omniauth tiktok
1个回答
1
投票

TLDR。

我们已经构建了您用于使其发挥作用的策略的分支,请参阅 我们的 github 存储库

Tiktok 不尊重 OAuth2 协议

注意

此错误发生在 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”。

the needed parameters from the tiktok api doc
问题是,由于 

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
  1. 调用中添加一个块。该块在发送
    access_token
    请求之前执行,因此使用最新版本的 OAuth2 gem 可以在向 tiktok 发送请求之前执行更正参数的代码块。
    我们尝试了 Monkeypatch 
  2. OAuth2::Authenticator
  3. apply
    方法,该方法会自动添加
    client_id
    并且它有效,但我们更喜欢上面描述的方法,因为它对其他代码片段没有影响。
    
    
  4. 2023 年 8 月 9 日更新

我们使用

acorn-influence

的分支迁移了旧 API。由于 Tiktok 更改了他们的 API,他们在 OAuth 回调阶段设置了更严格的读取参数的方式。 我们修改了通过猴子补丁 OAuth2::Authenticator 的方法来摆脱“client_id”的方法apply(params)。这个猴子补丁有一个特殊的 auth_scheme for tiktok,不发送

client_id
我们通过其他omniauth策略进行身份验证进行了测试,它似乎有效,但众所周知,

猴子补丁可能很危险并导致错误

© www.soinside.com 2019 - 2024. All rights reserved.