Github GraphQL API,硬编码访问令牌有效,试图混淆它没有

Posted

技术标签:

【中文标题】Github GraphQL API,硬编码访问令牌有效,试图混淆它没有【英文标题】:Github GraphQL API, hardcoding the access token works, trying to obfuscate it does not 【发布时间】:2021-01-10 06:53:24 【问题描述】:

下面是我的 apollo 客户端设置,当我硬编码在 GitHub 上创建的访问令牌并尝试 ping 端点时,它工作正常,我取回数据,我可以使用它等等。我尝试替换硬编码的值进入环境变量,但随后我开始从 github 收到 401 未经授权的错误。我记录了环境变量,并得到了我正在硬编码的确切字符串。我真的不明白为什么。谁能帮帮我?

const httpLink = createHttpLink(
    uri: 'https://api.github.com/graphql',
);
const authLink = setContext((_,  headers ) => 
    // const token = process.env.REACT_APP_GITHUB;

    return 
        headers: 
            ...headers,
            // authorization: token ? token : null
            authorization: `bearer fullAccessTokenString`
        
    
);

const client = new ApolloClient(
    link: authLink.concat(httpLink),
    cache: new InMemoryCache()
);

【问题讨论】:

【参考方案1】:

如果你使用环境变量,它只会在构建时被 Webpack 替换为实际值。您无法在前端代码中包含值并防止其被其他人读取。

您需要实现某种身份验证流程(例如“使用 GitHub 登录”按钮),而不是将访问令牌直接包含在您的代码中,这将允许您的用户在使用您的应用程序时获得他们自己的访问令牌。这不仅更安全,而且还意味着 A)如果访问令牌过期或被撤销,您不必重新部署您的应用程序,并且 B)您将不太可能达到 API 的速率限制,因为每个用户都将使用他们自己的配额。

【讨论】:

以上是关于Github GraphQL API,硬编码访问令牌有效,试图混淆它没有的主要内容,如果未能解决你的问题,请参考以下文章

如何从 API 声明数组来代替硬编码数组?

Graphql实践使用 Apollo(iOS) 访问 Github 的 Graphql API

Graphql实践使用 Apollo(iOS) 访问 Github 的 Graphql API

Graphql实践使用 Apollo(iOS) 访问 Github 的 Graphql API

如何使用 java 访问 github graphql API

如何从java访问github graphql API而不在java中运行curl命令