java开发bug问题:GitHub授权登录无法获取授权账号信息

项目场景:

在做仿码问论坛项目例子,照着一个视频写,做到登录采用GitHub第三方授权登录,遇到了一个坑,视频中那个大佬实现,我却出不来, 一时不知道为什么,后来查阅许多资料才顺利完成,当然,现在那个项目已经完成了


问题描述:

登录采用GitHub第三方授权登录时,检查返回的token信息无误,接着根据token获得对应的GitHub的User信息,发现它返回为空,无法获得user信息,后台报没有授权的权限,当时自己就没有想明白,中间反复调式,最终定位到根据返回的token无法获取对应的user信息,反正这中间花了不少时间去查阅资料,了解授权登录时的问题,发现没有人遇到我的问题,当时还怀疑过是不是返回的token错,后来测试了一下发现token没有问题,只能问大神,大神说让我多调式一下,说了一下思路,在我都快放弃的时候,突然在一篇博客看到了,我将之前改之前和改之后分享出来大家就明白,这就是一个坑

改之前的写法,我是这样传递,直接将参数信息放到了url携带过去的,发现无法获取user信息

public GithubUser getGithubUser(String accessToken){
  //get请求
  OkHttpClient client = new OkHttpClient();
  Request request = new Request.Builder()
  .url("https://api.github.com/user?access_token=" + accessToken)
   .build();
  try {
   //这一步有问题 debug出发现这一步报错
   Response  response = client.newCall(request).execute();
   String string = response.body().string();

   GithubUser githubUser = JSON.parseObject(string, GithubUser.class);

解决方案:

请将access_token通过作为Authorization HTTP header中的参数传输,而不是作为url中的参数明文传输

改之后的,将token放到header里传递过去


public GithubUser getGithubUser(String accessToken){
  //get请求
  OkHttpClient client = new OkHttpClient();
  Request request = new Request.Builder()

   .url("https://api.github.com/user?")
   .header("Authorization","token "+accessToken)
   .build();
  try {
   
   Response  response = client.newCall(request).execute();
   String string = response.body().string();

   GithubUser githubUser = JSON.parseObject(string, GithubUser.class);

原因分析:

【Github】更新官方推荐的使用access_token安全访问API的方式,用Authorization HTTP header代替query paramet,旧方式即将被废弃**


感谢下面这篇博客给我解决答案,谢谢

([https://blog.csdn.net/kuaileky/article/details/104217757](https://blog.csdn.net/kuaileky/article/details/104217757))

原文链接:https://blog.csdn.net/qq_42841352/article/details/109624358

最后修改日期:2020年11月14日