当前位置: 首页 > 知识库问答 >
问题:

Snapchat登录工具包错误:缺少PKCE参数

万志专
2023-03-14

我正在尝试使用他们的登录工具包从我的应用程序登录Snapchat。

此代码(我更改了clientId):

onSnapChat() {
    const state = `c25hcGNoYXR0ZXN0`;
    const redirectUri = `https://us-central1-library.cloudfunctions.net/redirectSnapchat`;
    const clientId = `45fad898-162e-48e0-8e4e-135adbc42716`;
    const scopeList = ['https://auth.snapchat.com/oauth2/api/user.display_name'];
    const scope = scopeList.join(' ');
    const loginQS = {
        client_id: clientId,
        redirect_uri: redirectUri,
        response_type: 'code',
        scope: scope,
        state: state
    };

    const stringifyLoginQS = qs.stringify(loginQS);
    const SNAP_ACCOUNTS_LOGIN_URL = 'https://accounts.snapchat.com/accounts/oauth2/auth';
    window.open(SNAP_ACCOUNTS_LOGIN_URL + '?' + stringifyLoginQS, '_blank');
}

生成此url:https://accounts.snapchat.com/accounts/oauth2/auth?client_id=45fad898-162e-48e0-8e4e-135adbc42716

返回此错误:{“错误”:“无效的请求”,“错误描述”:“缺少PKCE参数”。}

注:1。重定向uri与Snapchat 2中列出的重定向uri匹配。我正在使用开发环境OAUTH2客户机ID 3。重定向uri指向Firebase云函数。它永远不会被击中。

有什么建议吗?

谢谢你r

共有2个答案

宗政博
2023-03-14

虽然将静态字符串作为statecode\u challenge进行传递可以很好地工作,但它的全部意义在于,您可以确定重定向到应用程序的消息确实来自snapchat,而不是攻击者。攻击者很容易看到您每次都使用相同的静态代码,并在其虚假请求中使用该代码。相反,您应该尝试每次生成一个唯一的代码(服务器端),并在特定的时间限制内安全地存储它。然后,当您收到对firebase函数的传入请求时,您可以验证代码是否与存储的内容匹配。这样你就知道它来自snapchat。

公羊宇定
2023-03-14

基于Jon Hanley的评论,对代码的以下修改应该有效,这与LoginQS的添加(code_challenge和code_challenge_method)相同,为我修复了相同的PCKE问题。

试试这个修改过的代码;事实上,我确实为code_质询和状态键传递了state变量,没有问题:

onSnapChat() {
    const state = `c25hcGNoYXR0ZXN0`;
    const redirectUri = `https://us-central1-library.cloudfunctions.net/redirectSnapchat`;
    const clientId = `45fad898-162e-48e0-8e4e-135adbc42716`;
    const scopeList = ['https://auth.snapchat.com/oauth2/api/user.display_name'];
    const scope = scopeList.join(' ');
    const loginQS = {
        client_id: clientId,
        redirect_uri: redirectUri,
        code_challenge: state,
        code_challenge_method: "S256",
        response_type: 'code',
        scope: scope,
        state: state
    };

    const stringifyLoginQS = qs.stringify(loginQS);
    const SNAP_ACCOUNTS_LOGIN_URL = 'https://accounts.snapchat.com/accounts/oauth2/auth';
    window.open(SNAP_ACCOUNTS_LOGIN_URL + '?' + stringifyLoginQS, '_blank');
}
 类似资料:
  • 我正在建立一个订单管理系统。我最近发布了一个关于向客户添加订单的问题。好像99%我都搞定了。如果我查看我的终端,它首先找到当前的客户ID,然后创建一个新订单。下面的结果是。 但问题是,它没有添加参数。我故意这样做只是为了检查我的语法是否会执行以下sql语句。但是一旦我添加参数,我就会收到一个常见错误“参数丢失或值为空:顺序” 这是我的代码: ActionController::P arameter

  • 问题内容: 请有人帮我解决这个问题,我有一个Ubuntu服务器(仅终端机),我下载了android SDK,我安装了java,在/ tools中尝试运行./android时遇到错误,缺少平台工具。那么,由于某些原因,我如何从终端安装平台工具,却无法在任何地方找到此信息。 我发现的每个资源都假设我有一个GUI而不是终端,甚至是ubuntu的页面-https: //help.ubuntu.com/co

  • 我是EHCache的新手,尝试将其用作我们的缓存服务器。我写了代码试图开始: 在类路径中,我已经包含了terra cotta-toolkit-1.6-5 . 2 . 0 . jar、terra cotta-toolkit-1.6-runtime-5.0 . 0、slf4j-api-1.6.6、slf4j-jdk14-1.6.6、ehcache-2.7.0和ehcache-ee-2.7.0 我有eh

  • 问题内容: 尝试构建PlayN示例项目,我得到: 在每个文件上。我该如何解决? 编辑 : 我已将Profiles节点添加到,但错误仍然存​​在。我检查了确实存在,但实际上不存在。所以我已经添加到lib文件夹。而且错误仍然存​​在。 完整的pom.xml: 问题答案: 该工件始终被视为“系统”依赖项。它永远不会存储在仓库中。 有关详细信息,请参见http://maven.apache.org/gen

  • 我现在正在编写一个基本的PhP登录脚本,以便以后开发,我已经掌握了登录工具。php文件,但当我使用错误的详细信息登录(检查登录工具是否正常工作)时,我会出现以下错误: “PHP语法检查:解析错误:语法错误,第27行代码中出现意外的'$un'(T_变量)$q=”从username='$un'和pass=SHA1('$p')的用户中选择用户id、用户名“;” 任何关于为什么我得到这个错误的帮助都将不胜

  • 问题内容: 嗨,我是Android编程的新手,我想问的问题可能很简单,但是我对如何使其工作一无所知,请多多包涵。 我从Android开发人员网站安装了android-sdk和相关工具。我按照他们的指示创建了HelloWorld应用,但出现了一些我不理解的错误。 文件MainActivity.java是一个自动生成的文件,在以下位置,我不断出现此文件错误: 因此,我尝试浏览生成的class文件中的l