作者: admin

  • .NET 7 身份验证和授权的变化

    .NET 7 于今天(2022.11.9)发布了,在 ASP.NET Core 的身份验证和授权的配置上做了一些简化,变化如下:

    配置登录验证的方式,从 .NET 6 的:

    builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme);

    变成了 .NET 7 的:

    builder.Services.AddAuthentication().AddCookie();

    ASP.NET Core 会自动对认证方案进行推断,从而省略了参数的配置。

    对于登录验证和授权的中间件,.NET 7 中不再需要手动引入,框架会自动推断是否使用,因此,app.UseAuthentication()app.UseAuthorization()也就不再需要了。

    从而,运行一个完整的 ASP.NET Core MVC 程序所需要的最简配置是这样的:

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddControllersWithViews();
    builder.Services.AddAuthentication().AddCookie(); // new feature
    var app = builder.Build();
    app.UseStaticFiles();
    app.MapDefaultControllerRoute();
    app.Run();

    参考链接:https://auth0.com/blog/whats-new-in-dotnet-7-for-authentication-and-authorization/

  • 虚拟机安装 Debian 系统缩放的问题

    在vmware虚拟机中安装debian,并调整好缩放后,当vmware窗口大小变化时,会导致虚拟机缩放恢复到100%。

    解决办法:

    可以在终端命令行中,执行下面的命令解决这个问题:

    设置缩放比例为2倍

    # scaling-factor 仅能设置为整数 1=100%,2=200% 3=300% ......
    gsettings set org.gnome.desktop.interface scaling-factor 2

    该方法同样适用于virtualbox

  • 查看Debian版本

    可以使用如下命令来查看debian的版本号。

    cat /etc/debian_version
  • 全站上了HTTPS

    既然改了个版,那么趁此机会把SSL证书也上了吧,这也是以前一直想做但却一直没做的事。

    之前弄SSL证书,基本就是阿里云或腾讯云,但是现在阿里云的免费SSL证书已经从一年时长变成了三个月,非常麻烦不说,还经常忘。虽然腾讯云还支持一年,但是既然有这个趋势,还是早换了好。

    这次用的是自动证书管理环境(ACME)。ACME(Automatic Certificate Management Environment)协议是由互联网安全研究组织Let’s Encrypt开发的一种协议,用于自动化管理SSL/TLS证书的获取和续期。现在不仅支持Let’s Encrypt,还支持ZeroSSL等证书颁发机构。ACME协议通过与证书颁发机构(CA)进行通信,实现证书的自动化管理,消除了手动配置和更新证书的繁琐步骤。以下是ACME协议的主要特点和流程:

    主要特点

    1. 自动化:ACME协议能够自动化地完成域名验证、证书申请、颁发和续期的全过程,减少了人工干预。
    2. 安全性:ACME使用加密通信和域名验证机制,确保证书颁发过程的安全性。
    3. 开放性:ACME协议是开源的,任何人都可以实现和使用它,与任何支持ACME的证书颁发机构进行交互。
    4. 兼容性:许多常见的Web服务器和应用程序已经支持ACME协议,如Apache、Nginx等。

    工作流程

    1. 注册账户:客户端向证书颁发机构(CA)注册一个账户,用于后续的认证和证书管理。
    2. 域名验证:客户端向CA提出证书请求,并提供需要保护的域名。CA会向该域名发送验证请求(如HTTP-01或DNS-01挑战),以确认域名的所有权。
    3. 验证成功:如果客户端能够正确响应CA的验证请求,则证明了其对该域名的控制权,验证成功。
    4. 证书颁发:验证成功后,CA会向客户端颁发SSL/TLS证书。
    5. 证书安装:客户端将获取到的证书安装到Web服务器上,使其能够提供加密的HTTPS服务。
    6. 证书续期:在证书即将过期时,客户端会自动向CA请求证书续期,重复域名验证和证书颁发的流程。

    这么搞完后,基本就高枕无忧了,只要服务器不停机,HTTPS就永远在线!

  • 让Compser使用代理

    新建环境变量 http_proxy,值设置为代理地址:http://127.0.0.1:1080

  • WordPress禁用指定endpoints,防止用户信息泄露

    WordPress 在4.7.0版本之后将REST API插件集成到默认功能之中。REST API为WordPress的使用者提供了一个方便快捷的管理接口。在WordPress 4.7.0版本中,存在着一个越权漏洞,成功的利用这个漏洞,可以绕过管理员权限查看WordPress上所有发布过文章的用户信息列表。

    虽然现在用的不是4.7.0这个版本,但是为了确保安全,最好还是把这两个rest api接口禁用掉吧。

    禁用代码如下:

    // language: php
    // 禁用用户端点,同时确保其他 REST API 功能正常
    add_filter('rest_endpoints', function ($endpoints) {
        if (isset($endpoints['/wp/v2/users'])) {
            unset($endpoints['/wp/v2/users']);
        }
        if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
            unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
        }
        return $endpoints;
    });
  • PHP7.4 升级到 PHP8.1

    由于 php7.4 马上结束维护了,所以把博客服务器 PHP 版本做了个升级,直接升级到当前的最新稳定版 PHP8.1。

    升级,直接安装PHP8.1 即可。

    PHP8.1 的安装命令如下:

    apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-curl php8.1-xml php8.1-imagick php8.1-zip php8.1-gd php8.1-intl php8.1-bcmath

    安装完成后,顺便开启了 PHP8.1 的 JIT,以提高性能,开启方法如下:

    编辑 php.ini,在 opcache 配置部分添加加粗的两行:

    [opcache]
    ; Determines if Zend OPCache is enabled
    opcache.enable=1
    opcache.jit=tracing
    opcache.jit_buffer_size=50M

    保存后记得重启 php8.1-fpm。

    参考链接:https://stitcher.io/blog/php-8-jit-setup

  • Hello, Laravel

    经过一周的紧张开发,又一个面向银行的内部系统总算完成了。这个系统本来打算是用 .NET 来做,但这段时间一直心心念念 Laravel 框架,就像所有趁手好用的工具一样,只要用过一次,就忘不掉她的好。

    经过简单分析,发现这个系统其实并没有复杂的业务和计算,由于是内部系统,也不存在高并发的可能,所以,对于 Laravel 是适用的。本来 .NET 开发的系统已经完成了 70% ,花了一周不到的时间就用 Laravel 重写完成了,不得不感慨开发速度之快,同时开发体验拉满。

    这么多年来,虽说 PHP 也在断断续续的用,但从没怎么把它当回事,一般的项目主要还是使用 .NET 来做。对于自由开发者来说,.NET 可谓是相当的万金油,既可以做桌面开发,也可以做 Web 开发,关键时刻还可以拿来写一写安卓移动应用。由于是静态编译型语言,性能基本够用,配合 SQL Server 数据库,基本没有做不了的项目。

    但是,自从知道 Laravel 框架后,就在慢慢地在不断了解,越了解就越被她的优雅所打动,这里我也用了优雅这个词,因为实在没有想到更好的词能描述那种感觉。直到去年,尝试用她开发了一个小项目,由于当时对 Eloquent 了解还不够深入,甚至多对多、一对多这种关系的用法还不太清楚,就强行上了,结果也还行,顺顺利利的开发完成。

    这次的项目开发,在彻底弄清了 Eloquent 之后,就果断切换到 Laravel 来开发,真的是太好用了,再也不用定义 ASP.NET 里面的那一堆堆的实体类,再也不再需要 AutoMapper,再也不用那蹩脚的表单验证,再也不用等待编译生成,等等好处无法一一言说。总之就是开发轻量了,保存即生效,刷新即可看效果,整个过程轻松加愉快,身心愉悦!

    当然,Laravel 并不是完美的,并不适用于所有场景,比如高并发场景,计算密集、IO密集型应用,对于这些场景和应用,Laravel 不是不能做,而是不够好,性能不够高!当然,这不能怪 Laravel,这是 PHP 的问题,什么时候等 PHP 进化出高性能的运行模式,那 Laravel 就是完美的。

    最后,程序语言、程序框架始终是工具,只有根据需求和场景选择合适的工具才是真理。

    后记:该项目最终使用ASP.NET Core重新开发,重业务的项目还是要使用强类型语言,懂得都懂,不解释。

  • VirtualBox 安装增强功能

    首先通过菜单插入增强功能cd盘

    然后执行

    uname -r

    查看内核版本,debian11为:5.10.0-15-amd64

    然后执行:

    apt-get install build-essential linux-headers-内核版本号

    即:

    apt-get install build-essential linux-headers-5.10.0-15-amd64

    然后进入cdrom,执行:

    sudo sh ./VBoxLinuxAdditions.run

    安装完重启。

    如果重启后debian窗口仍然无法自动变大,那么关闭虚拟机,进入虚拟机设置,把显存调到最大即可。

  • Laravel 9 安装中文语言包

    首先使用 composer 安装依赖包:

    composer require laravel-lang/publisher laravel-lang/lang laravel-lang/attributes --dev

    注意 laravel-lang/publisher 这个包需要 php 8.1 版本才行,如果是 php 8.1 以下版本,要使用如下命令来安装旧版:

    composer require laravel-lang/publisher:^13.0 laravel-lang/lang:^10.9 laravel-lang/attributes:^1.1

    然后使用下面的命令把中文语言包添加到 lang 目录下:

    php artisan lang:add zh_CN

    最后修改配置文件 config/app.php,来使用中文。

    'locale' => 'zh_CN',

    注:本文基于 Laravel Framework 9.33.0 版本测试通过。

    参考链接:

    https://github.com/Laravel-Lang/lang

    https://publisher.laravel-lang.com/installation/