我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在网络请求中,有个非常神奇的401 unauthorized状态码,即使是普通的静态图片资源请求,也是可以带上这个401 unauthorized状态码的,这里就涉及到一个非常猝不及防的网络安全的问题,这里暂作伏笔。在本文中,讨论的是正常使用的401 unauthorized状态码。具体上来说,就是如何在electron中,简易处理401状态码。

苏南大叔:electron程序,简易处理401 unauthorized授权请求状态码 - electron-401
electron程序,简易处理401 unauthorized授权请求状态码(图4-1)

本文测试环境:macelectron@5.0.7

背景描述

正常来说,浏览器处理401 unauthorized的时候,是会跳出个登录框的,可以输入用户名密码。在细节上来说,不同的浏览器处理的效果,也不一致。当然,也有的浏览器是不做任何处理的。比如在electron中,就是默认不做处理的。

苏南大叔:electron程序,简易处理401 unauthorized授权请求状态码 - electron-401-authorization
electron程序,简易处理401 unauthorized授权请求状态码(图4-2)

但是,在实际应用中,还是需要对401 unauthorized做处理的。本文中的electron,处理的方式很直接暴力,把用户名密码通过代码的方式,直接发送过去。而没有展示chrome中的默认可输入的用户名密码对话框。

苏南大叔:electron程序,简易处理401 unauthorized授权请求状态码 - 401-login-dialog
electron程序,简易处理401 unauthorized授权请求状态码(图4-3)

相关代码

主进程核心代码:

app.on('login', function (event, webContents, request, authInfo, callback) {
  callback("<username>","<password>");
});

主进程扩展版本代码:

app.on('login', function (event, webContents, request, authInfo, callback) {
  //console.log(request);
  //console.log(authInfo);
  var url=request.url;
  var auth=authInfo.realm;
  if (url=="<url>" && auth=="<realm>"){
    callback("<username>","<password>");
    event.preventDefault(); 
  }
});

苏南大叔:electron程序,简易处理401 unauthorized授权请求状态码 - electron-401-code
electron程序,简易处理401 unauthorized授权请求状态码(图4-4)

在上述代码中,使用app.on('login')事件,监控到了页面跳转的401 unauthorized状态。同时,可以通过对requestauthInfo的分析,匹配不同的已知用户名密码处理逻辑。

注意提交字符串:

  • 请替换字符串:<username><password>
  • 请替换基本的判断条件,比如:<url><realm>

这段代码存在的问题是:

  • 不能判断用户名密码是否正确。
  • 用户名密码是写死在代码中的,而不是用户输入的,没有跳出用户名密码登陆框。

相关链接

对于服务器端如何发出这种401状态,苏南大叔的下面这篇文章,可以提供一种思路:

总结

在本文中,苏南大叔对electron401 unauthorized状态码,进行了简易处理。当然,这个401状态码,可以做的文章是相当的多。欢迎大家继续关注苏南大叔的相关文章。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   electron    401