PEANUT996

解决Gitalk的[GitHub API]Deprecation notice for authentication via URL query parameters参数验证问题

解决办法

  • 更新Gitalk依赖至v1.5.2,(确保你的gitalk版本在v1.5.2以上)

问题

如果没猜错的话,博客集成了Gitalk的用户这两天被Github官方邮件轰炸了,邮件标题统一是[GitHub API]Deprecation notice for authentication via URL query parameters,大概看了下,在获取用户repo下的issue的时候,直接使用clientIDclientSecret作为查询字符串进行授权验证,这种验证方式在2020年7月1日被舍弃。

查询该项目下的issue,已经有人提了这个问题,说出了原因:在Github DeveloperDeprecated APIs and authentication文中写道,官方为了保证授权的安全性,舍弃部分API和验证方式,其中包括舍弃采用查询参数验证,下面是官方原话

Authenticating using query parameters

GitHub is deprecating authentication to the GitHub API using query parameters, such as using a access_token query parameter for OAuth user authentication or a client_id/client_secret query parameter for OAuth application authentication. All authentication to the GitHub API should be done using HTTP basic authentication.

应该是Gitalk的作者没有及时更改OAuth的验证方式,导致用户收到Github官方的邮件“轰炸“。

解决

在issue#343下,@geektutu#344是使用官方的Personal Access Token(以下简称PAT)替代现在的查询验证,问题是token具有限制,如每小时60次,还需要担心滥用的情况,当然对于大部分人是够用了。
@fletchto99给出了最终的 解决方案,#346中,他将clientIDclientSecret放在Header中的auth中,完美地解决了这个问题

Hexo博客NexT主题解决办法

在我写下博客的时间,Gitalk的官方已经更新到v1.5.2,更新你的依赖确保你的版本在1.5.2以上(在网页中Gitalk右上角点击即可查看)。
若采用npm安装方式,可直接npm install更新依赖。 在我使用的NexT主题中,默认的Gitalk的配置在theme/next/_config.yml即可启用,关于替换Gitalk源文件url的部分配置在_config.yml的vendors区块中,代码如下

vendors:
  # Gitalk
  # gitalk_js: //cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js
  # gitalk_css: //cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css
  # 修改gitalk文件url如下
  gitalk_js: //cdnjs.cloudflare.com/ajax/libs/gitalk/1.5.2/gitalk.min.js
  gitalk_css: //cdnjs.cloudflare.com/ajax/libs/gitalk/1.5.2/gitalk.min.css

可以看到默认使用cdn.jsdelivr.netcdn,但在我这里可能由于服务器缓存问题,即使我直接访问网页显示的版本是v1.5.2,实际部署后显示版本仍为v1.5.1,只可手动指定为v1.5.2的版本,deploy后在网页中查看Gitalk版本在v1.5.2即可
其他主题请自行搜索解决办法