Fork me on GitHub
QuZheng


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索

ASP.NET 集成 Auth2

发表于 2019-12-07 | 分类于 Asp.net | 阅读次数

​ 由于我们公司的技术比较落后,目前开发的所有给移动端以及 Web 端,使用的 WebAPI 接口都没有身份验证。安全性比较差。由于我们公司的客户都是传统企业的客户所以刚开始也没啥问题。但是,最近一段时间我们的系统老是别人各种攻击。所以想把这个问题解决了。

​ 我很早以前就了解 OAuth 协议,但也只是了解。知道一些基本的概念。也接触过其他公司的一些开放接口基本上都是基于 Token的所以就打算找找 asp.net 下面有没有开源的省事的解决方案。

​ 很快我发现了 Owin 这个东西以前都没听说过,从网上找了几个代码基本上都是基于他的而且非常简单就可以实现我想要的效果,让人洗出往外。搞了一个测试项目通过了以后就想了解了解 Owin 这个项目。

  • ASP.NET OAuth 2.0 新手上路

​ 搜了一些文章大概知道 Owin 是一套标准规范。解决的主要问题就是让 Asp.Net 可以不依赖 IIS。当然还有一套非常牛逼的逻辑在里面,但是我没看懂。后来我又翻看了几篇文章,发现OAuth现在又更好的实现了 IdentityServer3,这个是基于 Owin 的但是好像是更牛逼。最新版本是4,但是只能运行在 .net core 下,所以过段放弃4使用3。

​ 这个东西官方也有很多例子可以参考,网上也找了一些文章,基本上都是基于官方DEMO的。最后贴一些今天一下午找的一些比较优秀的文章。

  • 基于 IdentityServer3 实现 OAuth 2.0 授权服务【客户端模式(Client Credentials Grant)】

  • 理解OAuth 2.0

  • 一个功能完备的.NET开源OpenID Connect/OAuth 2.0框架——IdentityServer3

  • 基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】

  • OWIN与Katana详解

  • ASP.NET WebApi OWIN 实现 OAuth 2.0

UrBackup 备份软件使用

发表于 2019-12-07 | 阅读次数

UrBackup 是一款跨平台 客户端/服务器 (C / S架构 ) 的开源跨平台备份系统。公司客户之前也有异地备份数据的需求,但是我们的做法都是让客户在局域网内增加一台服务器,共享某一个目录,然后在需要备份的电脑上写一个批处理文件进行文件备份。在头条看到这款开源软件后,便想下载下来使用下。

软件的下载安装

我是在官方网站下载的服务器和客户端的WINDOWS系统的安装包,下载的时候不要选只支持X64位的,我第一下载的文件没有安装成功。我下载的软件版本如下

  • 服务端:URKBACK SERVER 2.3.8

  • 客户端:UrBackUp Client 2.3.4

安装过程比较顺利没有出现任何问题。

软件配置

服务器安装完毕后,在浏览器中输入http://127.0.0.1:55414/ 就可以打开服务器软件。在设置中配置服务器备份文件路径。配置完毕后,需要在设置文件的权限为可读写。

客户端安装完毕后,软件后在系统托盘中出现。,需要在互联网选项卡配置主机名和端口号,因为我用的默认的端口号所以只需要配置IP地址就可以了。

1560306282723

  • 配置文件备份的路径 在增加删除备份路径功能中可以添加,删除需要备份的文件夹路径。

  • 配置 windows 组件,可以配置需要备份的组件,说实话我也没明白这个是干啥的。但是这个里面有一个比较强大的功能是 SqlServerWriter 目录下面,有本机安装的数据库的所有文件。选择这个目录后,可以自动备份所有的数据库。

文件备份

在客户端中点击执行完整备份就可以立刻执行备份操作了。客户端执行备份后,在服务端可以看到备份的情况以及备份日志。

1560306713742

1560306725442

我测试了一下38个G 的文件百兆局域网1个半小时备份完成, 效率也非常不错了。

几个问题

这个备份工具本身功能感觉已经非常不错了但是在使用过程中感觉还是有一些小的缺陷。

  1. 客户端备份时间设定不灵活,目前软件只能是指每隔多长时间执行一次备份,不能设置定具体的备份时间。
  2. 软件的易用性有点差,备份工作一旦开始无法停止。我尝试了各种办法,在服务端点停止,在客户端点停止不了。。

总结

这款软件已经是一款非常NB的免费开源备份软件了。基本能够满足我们的备份要求。使用中出现了一些问题,可能也都是由于我操作不当引起的。还是想大家推荐一下这款软件

记一次客户网站变更过程

发表于 2019-06-04 | 阅读次数

起因

公司10年前给一事业单位使用asp.net 搭建了网站。最近事业单位上云,要求将公司之前做的网站也上云,但是在上云的安全检测中扫描出了100多个漏洞。。云中心要求解决这些漏洞后才能上云,但是由于公司离职人员过于频繁,管理漏洞大,网站的源代码已经找不到了。客户要求1周内必须解决问题。

分析

看了云中心提供的测试报告由于老网站使用asp.net web from 的方式,所以页面大量的 ViewState 。被标记为有风险要求加密还有一些问题必须通过修改源代码 。但是源代码不存在啊。。也不要好跟客户要钱了,毕竟自己软件的问题。现在需要一个最低成本解决问题的方案。还要解决所有的问题。

很明显啊CMS大法好啊,之前用过很多 ASP 和 PHP 的CMS,但是公司的人主要是用.NET 做开发了,所以还是选择了 .Net 的 SitServer CMS ,感觉功能还可以主要能满足我这个项目的需求(PS,和那些PHP的CMS比功能还有差距)。

动起来

SiteServer CMS 学习

SiteServer CMS 的 文档中心 还是不错了,从软件的安装部署 到标签语言的使用、插件的使用等等都算比较全面。但是,缺少一个从零教学的文章,零基础的用户很难通过文档把网站做起来。还好我不是零基础。

网站搭建

简单看了看文档以后,就做起来了,做的时候还算比较顺利,基本上没遇到什么问题。SiteServer CMS模板中心有好多模板参考,做不出来了就参考官方的模板,用了2天时间把网站 搭建起来。

数据迁移

之前网站用了10年,新闻数量巨大。刚开始我还一篇一篇的从老网站复制内容到新网站,复制了大概100多篇以后。我发现老网站的一个栏目居然有200多条新闻,我录入100条用了半天时间,这两百条得要了我的老命啊。

采集

咋办呢,自己写程序抓网页迁移数据太麻烦,坚持拿来主义的原则,用第三方软件,火车头采集器。简单了解了火车头的采集过程和设置后就开动了。采集的过程中遇到一个问题,之前网站的分页使用的 aspnetpager 的 POST 提交,所以不太好采集。百度了一些文章以后,还是不会。使用了一个笨办法,把列表中的每一页另存到本地,命名按照页面的分页序号命名。从本地 IIS 搭建网站,将另存为的页面文件夹配置为网站文件夹。采集软件的采集地址也切换到本地 IIS ,采集过程顺利完成。

数据迁移

使用的采集软件是免费版本的不支持 SqlServer 的数据库发布。分析后发现 火车头使用的是 Sqllite 数据库。从网上下载了 SqlLiteManager 将数据存储成了 SQL脚本。将脚本在 SqlServer 中执行。然后使用 insert into select 语句将数据导入到新闻内容表中。由于客户的新闻中图片和附件较少,所以新闻中的图片和附件我也就没在处理了。

复检

网站搭建完毕后让云中心的人进行了复检,云中心的人发现没有问题。要求将后台的账号密码提供给他们,他们要扫描后台。不得不说 SiteServer 做的还是不错的,顺利通过了云中心的审查,并且云中心要求的强密码策略,系统也是默认支持的。这里给 SiteServer 点个赞。最终顺利通过了云中心的检测,网站可以顺利上线。

总结

此次事件从开始到结束一共经历了7天时间,从刚开始的浇头烂额到最终拨云见日,回头想想其实并么有什么复杂的。技术人员不能给自己设限,这个完不成,根本不可能这些话尽量不要说,还是要多思考,多百度。我们经历的问题很多人都经历过。乐观面对工作,996燥起来。

git 常用命令总结

发表于 2019-03-25 | 阅读次数

git init 创建项目

git init 可以将将目录初始化为 git 项目目录

git clone 克隆项目

使用 git clone 可以拷贝一个 git 仓库到本地。

1
git clone [url]

git add 修改提交到缓冲区

使用 git add 命令可以将新添加的文件添加到暂存区。

1
git add [文件名列表]

使用 git add . 命令可以将工作区的修改都添加到暂存区里。

git pull 获取最新版本代码

我们可以使用 git pull 命令获取当前分支的最新版本。

git checkout 命令

创建新的分支

1
git checkout -b [分支名称]

切换分支

1
git checkout [分支名称]

撤销某个文件的修改

1
git checkout [文件名]

撤销所有的修改

1
git checkout .

git commit 提交命令

提交代码,将暂存区的代码提交到仓库

1
git commit -m "说明"

git push 命令

提交本地分支的修改到远端仓库的分支中

1
git push [主机名] [分支名]

git merge 合并分支

将分支的内容合并到其他的分支中

1
git merge [分支名]

参考资料

  • gitpro 中文
  • 朋友虎子现场教学

使用 Fiddler 获取微信公众号的HTML源码

发表于 2018-05-25 | 阅读次数

基于 CentOS 搭建 KODExplorer 服务

发表于 2017-11-28 | 分类于 Linux | 阅读次数

部署 XAMPP 服务

下载 XAMPP

XAMPP 是个集成了多个组件的开发环境 ,我们通过 wget 命令获取其安装包

1
wget https://www.apachefriends.org/xampp-files/7.1.10/xampp-linux-x64-7.1.10-0-installer.run
阅读全文 »

基于 Ubuntu 搭建 Django 站点

发表于 2017-11-08 | 分类于 Linux | 阅读次数

Django 是一个用 Python 开发的开源 Web 应用框架,采用 MVC 模式。本实验带您搭建一个最简单的 Django 站点,并使用 uwsgi 和 nginx 作为 Web 服务器。

阅读全文 »

基于 CentOS 搭建 Ghost 博客

发表于 2017-11-07 | 阅读次数

Ghost 是一块非常出色的开源博客平台,界面简洁,专注写作。本教程中,您将学到如何在 CentOS 7 上安装 Ghost ,包括安装 Nodejs 环境以及配置 Nginx 对 Ghost 的代理请求等步骤。

安装 Node.js 及相关包

安装 Node.js

逐行输入下面的命令进行安装:

1
2
3
4
5
6
7
yum update -y
yum groupinstall -y "Development Tools"
curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
yum -y install nodejs
#npm config set registry https://registry.npm.taobao.org
#npm i -g cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装成功后通过运行node -v及npm -v 出现版本号即可表示安装成功。

因为国内网络的关系,也同时安装了 cnpm 模块,后续将使用该命令代替 npm 命令。

安装 Ghost Client (ghost-cli)

1
cnmp i -g ghost-cli

一般而言,安装成功后通过运行 ghost -v,出现版本号即可表示安装成功。但因为国内的网络问题,安装后请检查下终端的 log,如果有出现任意红色报错信息,则证明只有部分安装成功,需要重新执行命令安装。

如果不能正常安装请多次执行上面的命令

安装 Ghost

添加 Ghost 运行用户并创建目录

请按行依次输入下面的命令

1
2
3
4
adduser ghost
mkdir /var/www
mkdir /var/www/ghost
chown ghost /var/www/ghost

安装 Ghost

本教程以 SQLlite3 作为 Ghost 的数据库

1
2
cd /var/www/ghost
ghost install local --db=sqlite3

安装成功的截图:

image

如果你安装后不是类似上面的截图,则证明 Ghost-cli 没有安装成功;请重复执行上一步的“安装 Ghost Client”步骤。

启动Ghost

安装成功后 Ghost 默认就已经启动了,下面的命令是分别是让 Ghost 停止、启动、重启命令,可尝试使用。

1
2
3
ghost stop
ghost start
ghost restart

安装成功后默认是运行在http://localhost:2368/,如果需要对外访问,则需要通过 Nginx 进行反向代理。

安装 Nginx

添加 Nginx 到 yum 源

使用以下命令添加 CentOS 7 Nginx yum 资源库:

1
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装 Nginx

1
yum install -y nginx

如无意外,Nginx 将完成安装在你的服务器中。

image

启动 Nginx

刚安装的 Nginx 不会自行启动,需要通过如下命令启动

1
systemctl start nginx.service

如果一切进展顺利的话,现在你可以通过你 IP( http://123.207.15.141/ )来访问你的 Web 页面syste来预览一下 Nginx 的默认页面。

image

如果看到上面的页面,那么说明你的 CentOS 中的 Nginx 已经正确安装。

另外还可以通过systemctl enable nginx.service命令加入开机启动项。

Nginx 配置反向代理

修改 config 文件

请确保 Ghost 已经在运行阶段方可进行如下操作。

1
vi /etc/nginx/conf.d/default.conf

运行上面的命令后,再键入 i 然后移动光标在约第七行修改相关文件代码:

1
2
3
4
5
:q
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

改为:

1
2
3
4
5
6
location / {
proxy_pass http://127.0.0.1:2368;
proxy_redirect default;
root /usr/share/nginx/html;
index index.html index.htm;
}

完成后通过按 ESC ,随后输入 :wq 回车保存。

image

然后运行 nginx -s reload 重启 Nginx。

Ghost 的界面管理

首页

完成了上面的步骤之后,访问 http://123.207.15.141/ 就能看到 Ghost 的默认页面变成了如下:

image

管理界面

访问http://123.207.15.141/ghost 就可以继续相关写作设置了。

image

image

基于 CentOS 7 搭建 GitLab

发表于 2017-11-07 | 阅读次数

准备环境

在正式开始安装之前,先更新软件包并打开相关服务的权限。

更新软件包

1
yum update -y

安装 sshd

安装 sshd:

1
yum install -y curl policycoreutils-python openssh-server

配置防火墙

打开 /etc/sysctl.conf 文件,在文件最后添加新的一行并保存:

1
net.ipv4.ip_forward = 1

启动并启动防火墙

1
2
systemctl enable firewalld
systemctl start firewalld

放通 HTTP:

1
firewall-cmd --permanent --add-service=http

重启防火墙:

1
systemctl reload firewalld

在实际使用中,可以使用 systemctl status firewalld 命令查看防火墙的状态。

安装 postfix

GitLab 需要使用 postfix 来发送邮件。当然,也可以使用 SMTP 服务器。具体步骤请参考 官方教程。

安装:

1
yum install -y postfix

打开v文件 , 在第 119 行附近找到 inet_protocols = all ,将 all 改为 ipv4 并保存:

1
inet_protocols = ipv4

启用并启动 postfix:

1
2
systemctl enable postfix
systemctl start postfix

配置 swap 交换分区

由于 GitLab 较为消耗资源,我们需要先创建交换分区,以降低物理内存的压力。
在实际生产环境中,如果服务器配置够高,则不必配置交换分区。

新建 2 GB 大小的交换分区:

1
dd if=/dev/zero of=/root/swapfile bs=1M count=2048

格式化为交换分区文件并启用:

1
2
mkswap /root/swapfile
swapon /root/swapfile

添加并启动,打开 /etc/fstab 文件,在文件最后添加新的一行并保存:

1
/root/swapfile swap swap defaults 0 0

安装 GitLab

将软件源修改为国内源

由于网络环境的原因,将 repo 源修改为清华大学。

在 /etc/yum.repos.d 目录下新建 gitlab-ce.repo 文件并保存,内容如下:

1
2
3
4
5
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

安装 GitLab

刚才修改过了 yum 源,因此先重新生成缓存:(此步骤执行时间较长,一般需要 3~5 分钟左右,请耐心等待)

1
yum makecache

安装 GitLab:
(此步骤执行时间较长,一般需要 3~5 分钟左右,请耐心等待)

1
yum install -y gitlab-ce

初始化 GitLab

配置 GitLab 的域名(非必须)

打开 /etc/gitlab/gitlab.rb 文件,在第 13 行附近找到 external_url 'http://gitlab.example.com',将单引号中的内容改为自己的域名(带上协议头,末尾无斜杠),并保存。

1
external_url 'http://work.myteam.com'

初始化 GitLab

特别重要!

使用如下命令初始化 GitLab:
(此步骤执行时间较长,一般需要 5~10 分钟左右,请耐心等待)

1
sudo gitlab-ctl reconfigure

GitLab 安装已完成

至此,我们已经成功地在 CentOS 7 上搭建了 GitLab。 现在可以在这里(http://<您的 CVM IP 地址>/)访问 GitLab 了。

  • 在实际生产中,建议您使用 2 核 4 GB 或更高配置。点击这里 可以查看 GitLab 官方推荐的配置和可承载人数对应表。
  • 再次提醒您,定期执行 yum update -y 以保持各软件包的最新状态。

搭建基于 ZIPKIN 的数据追踪系统

发表于 2017-11-06 | 阅读次数

Zipkin

Zipkin 是一个分布式数据追踪系统,适用于微服务架构下的调用链路数据采集及分析工作。

配置 Java 环境

安装 JDK

Zipkin 使用 Java 8

1
yum install java-1.8.0-openjdk* -y

安装 Zipkin

新建目录

1
mkdir -p /data/release/zipkin && cd "$_"

下载 Zipkin

1
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'

启动 Zipkin

1
java -jar zipkin.jar

Zipkin 默认监听 9411 端口, 使用浏览器访问 http://:9411 即可看到 Zipkin 自带的图形化界面。

配置 MySQL 数据持久化方案

Zipkin 支持的持久化方案很多 ,如: Cassandra,MySQL,Elasticsearch . 本实验使用 MySQL 5.7 作为数据库持久化方案。

### 安装 MySQL 5.7

使用 Ctrl + C 退出上个步骤的 Java 进程并下载 rmp 包。

1
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

安装 rpm 包

1
rpm -Uvh mysql57-community-release-el7-9.noarch.rpm

安装 MySQL

1
yun install mysql-community-server -y

启动 MySQL 服务

1
systemctl start mysqld.service

设置 MySQL 密码

获取 root 临时密码

1
grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'

使用上一步的获得的临时密码登入 MySQL

1
mysql -uroot -p

设置 MySQL 账户的 root 密码

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Xx$Zipkin2017';

登录 MySQL

1
mysql -u root --password='Xx$Zipkin2017'

创建 Zipkin 数据库

1
create database zipkin;

切换数据库

1
use zipkin;

初始化表及索引

1
source /data/release/zipkin/zipkin_init.sql

执行以下命令会看到zipkin_annotations, zipkin_dependencies, zipkin_spans 三张数据表,说明初始化成功了

1
show tables;

退出 MySQL, 回到 Bash shell

1
exit

启动 Zipkin

注: 此处默认使用实验生成的密码

1
2
3
cd /data/release/zipkin
STORAGE_TYPE=mysql MYSQL_HOST=localhost MYSQL_TCP_PORT=3306 MYSQL_DB=zipkin MYSQL_USER=root MYSQL_PASS='Xx$Zipkin2017' \
nohup java -jar zipkin.jar &

创建具有数据上报能力的Demo

搭建 NodeJS 环境

1
2
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum install nodejs -y

创建 Demo 目录

创建 /data/release/service_a 目录

1
mkdir -p /data/release/service_a && cd "$_"

使用 NPM 安装相关依赖

请在 /data/release/service_a 目录下创建并编辑package.json, 参考下面的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "service_a",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.15.3",
"zipkin": "^0.7.2",
"zipkin-instrumentation-express": "^0.7.2",
"zipkin-transport-http": "^0.7.2"
}
}

安装相关依赖

1
npm install

创建并编辑 app.js

请在 /data/release/service_a 目录下创建 app.js ,参考下面的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const express = require('express');
const {Tracer, ExplicitContext, BatchRecorder} = require('zipkin');
const {HttpLogger} = require('zipkin-transport-http');
const zipkinMiddleware = require('zipkin-instrumentation-express').expressMiddleware;
const ctxImpl = new ExplicitContext();
const recorder = new BatchRecorder({
logger: new HttpLogger( {
endpoint: 'http://127.0.0.1:9411/api/v1/spans'
})
});
const tracer = new Tracer({ctxImpl, recorder});
const app = express();
app.use(zipkinMiddleware({
tracer,
serviceName: 'service-a'
}));
app.use('/', (req, res, next) => {
res.send('hello world');
});
app.listen(3000, () => {
console.log('service-a listening on port 3000!')
});

启动服务

1
node app.js

该服务监听 3000 端口, 使用浏览器访问 http://:3000 后,看到“hello world” 的文本字样说明服务已经正常工作。

至此,本入门教程已结束,而 Zipkin 的学习只是一个开始,如有兴趣,可尝试搭建一个基于 Kafka + Zookeeper + Elasticsearch 的分布式服务。

12…4
QuZheng

QuZheng

38 日志
6 分类
30 标签
RSS
© 2019 QuZheng
由 Hexo 强力驱动
主题 - NexT.Mist
本站访客数 人次 本站总访问量 次