Apisix 使用 authing 进行认证登陆

本文介绍 apisix 和 authing 对接进行 api 登陆验证的方式。 apisix 介绍 Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 不仅支持插件动态变更和热插拔,而且拥有众多实用的插件。Apache APISIX 的 OpenID Connect 插件支持 OpenID Connect 协议,用户可以使用该插件让 Apache APISIX 对接 Authing 服务,作为集中式认证网关部署于企业中。 authing 介绍 Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。其主要功能包括:单点登录、用户分析、扫码登录、多因素认证、行为审计、风险控制、跨平台设备管理、IoT 身份认证等;兼容国际各类标准协议:OAuth2.0、OIDC、SAML、AD/LDAP、WS-Fed、JWT 等;此外还有基于函数计算可以无限制拓展 Authing 能力的 Pipeline。支持云交付和私有化部署方式,帮助企业和开发者提升生产效率。 apisix 和 authing 对接 1 登录 Authing 账号,选择自建用户应用,输入应用名称和认证地址 2 设置登陆回调 URL 和登出回调 URL 为你的 apisix 访问地址 http://127.0.0.1:9080/ 3 在用户管理界面创建一个新用户,账号密码都是 user1/user1 4 在应用的配置里记录下应用的 App ID、App Secret、服务发现地址 这些信息会在 apisix 配置插件时使用。 5 安装 apisix, 具体的安装步骤就不用我们讲了,可以参考官方文档。 ...

三月 19, 2022 · 1 分钟 · overstarry

Google_OAuth2 实践

本篇文章主要介绍了 OAuth2.0 和 使用 Google 的 OAuth2.0 登录方式。 OAuth2.0 介绍 OAuth 2.0 是 OAuth 协议的下一版本,但不向下兼容 OAuth 1.0。OAuth 2.0 关注客户端开发者的简易性,同时为 Web 应用、桌面应用、手机和智能设备提供专门的认证流程。 Facebook 的新的 Graph API 只支持 OAuth 2.0,Google 在 2011 年 3 月也宣布 Google API 对 OAuth 2.0 的支持,Windows Live 也支持 OAuth 2.0。 在认证和授权的过程中涉及的三方包括: 1、服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。 2、用户,存放在服务提供方的受保护的资源的拥有者。 3、客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。 使用 OAuth 进行认证和授权的过程如下所示: (A)用户打开客户端以后,客户端要求用户给予授权。 (B)用户同意给予客户端授权。 (C)客户端使用上一步获得的授权,向认证服务器申请令牌。 (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。 (E)客户端使用令牌,向资源服务器申请获取资源。 (F)资源服务器确认令牌无误,同意向客户端开放资源 Google 的 OAuth2.0 登录方式 1 进入 Google Cloud Platform 创建一个项目 2 进入 API 与服务界面,选择凭据管理,点击创建凭据,选择 OAuth 2.0 客户端 ID ...

三月 13, 2022 · 2 分钟 · overstarry

Go 模糊测试

本篇文章主要讲解在 go 语言中进行模糊测试的基础知识。通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入。可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、buffer overflow、拒绝服务和 cross-site scripting 攻击。 想要在 go 中使用模糊测试,需要安装 go1.18beta1 以上版本,具体的安装就不过多叙述了。 1 创建项目文件夹 我们创建一个名叫 fuzz-demo 的文件夹,并在其中创建一个名叫 main.go 的文件。 2 输入代码 在 main.go 中输入如下代码: package main import "fmt" func Reverse(s string) string { b := []byte(s) for i, j := 0, len(b)-1; i < len(b)/2; i, j = i+1, j-1 { b[i], b[j] = b[j], b[i] } return string(b) } func main() { input := "quick quick brown fox jumped over the lazy dog" rev := Reverse(input) doubleRev := Reverse(rev) fmt.Printf("原来: %q\n", input) fmt.Printf("反转: %q\n", rev) fmt.Printf("再反转: %q\n", doubleRev) } Reverse 函数的作用就是对字符串进行反转。 ...

三月 6, 2022 · 3 分钟 · overstarry

Pyroscope 持续分析平台

什么是 Pyroscope? Pyroscope 是一个开源的持续分析系统,使用 Go 语言实现。服务端使用 web 页面查看,提供丰富的分析的功能,客户端提供 Go、Java、Python、Ruby、PHP、.NET 等多种语言的支持,并且支持 PUSH、PULL 两种采集方式。 Pyroscope 是一个开源的持续性能剖析平台。它能够帮你: 找出源代码中的性能问题和瓶颈 解决 CPU 利用率高的问题 理解应用程序的调用树(call tree) 追踪随一段时间内变化的情况 特性: 可以存储来自多个应用程序的多年剖析数据 你可以一次查看多年的数据或单独查看特定的事件 较低的 CPU 开销 数据压缩效率高,磁盘空间要求低 快捷的 UI 界面 部署架构图: Pyroscope server 安装 Pyroscope server 端可以通过 docker 安装: docker run -it -p 4040:4040 pyroscope/pyroscope:latest server 也可以在各中操作系统中直接安装。 比如 Mac: brew install pyroscope-io/brew/pyroscope brew services start pyroscope-server 各 Liunx 发行版也方便安装 比如 ubuntu: wget https://dl.pyroscope.io/release/pyroscope_0.10.2_amd64.deb sudo apt-get install ./pyroscope_0.10.2_amd64.deb 安装完成后,就可以通过 web 界面访问了:http://localhost:4040, 你可以通过配置文件更改监听端口以及其它一些配置项。 ...

二月 26, 2022 · 1 分钟 · overstarry

Fsck

起因 在一次使用虚拟机的时候,发现 Linux 系统进入了 Initramfs,无法正常进入系统,推测可能是系统异常关机导致磁盘文件损坏导致的。 解决 网上搜寻了一些解决方法,普遍的推荐方法是使用 Linux 命令 fsck 命令来修复磁盘文件。 费了好大劲进入另一个系统使用 fsck.ext4 -f /dev/sda1 来检查修复磁盘文件 (我所使用的 linux 系统磁盘是 ext4 格式的)。 接下来我来介绍下 fsck 的使用。 fsck fsck(file system consistency check)是 Unix 和类 Unix 系统上用于检查文件系统完整性的工具。 语法:fsck [选项] [文件系统] 常见参数: -f 强制检查文件系统,不管是否有损坏 -p 自动修复文件系统错误 -q 做一个快速检查,以确定文件系统是否被干净地卸载。 -y 关闭互动模式,询问全部选择 y 参考 https://web.archive.org/web/20150529001726/http://www.manpagez.com/man/8/fsck/ https://zh.wikipedia.org/zh-hans/Fsck https://zh.wikipedia.org/wiki/Unix%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%88%97%E8%A1%A8

二月 19, 2022 · 1 分钟 · overstarry

GRPC 单向安全连接

从本篇开始,我将介绍加强 gRPC 的安全性的一系列措施。本篇介绍使用 TLS 加密 gRPC 通信的第一篇文章:gRPC 单向安全连接。 TLS 协议介绍 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在 1994 年推出首版网页浏览器,网景导航者时,推出 HTTPS 协议,以 SSL 进行加密,这是 SSL 的起源。IETF 将 SSL 进行标准化,1999 年公布第一版 TLS 标准文件。随后又公布 RFC 5246(2008 年 8 月)与 RFC 6176(2011 年 3 月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如 Google、Facebook 等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。 SSL 包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用 X.509 认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。 单向安全连接 通过安全的连接进行传输数据非常重要,那么如何在 gRPC 中使用 TLS 保护 gRPC 通信呢?TLS 认证机制集成在了 gRPC 库中,这使得 gRPC 可以很方便使用 TLS 进行安全连接。 客户端和服务端之间的安全传输可以采用单向或双向的方式来实现。本文主要介绍 单向安全连接。 在单向安全连接中,只有客户端会校验服务端,以确保它所接收的数据来自预期的服务器,在建立连接时,服务端会与客户端共享其公开证书,客户端会校验收到的证书。这是通过证书授权中心完成的。证书校验完成后,客户端会使用密钥加密数据。 要启用 TLS,需要证书和密钥 (xx.key,xx.pem/xx.crt),前者是用于签名和扔着公钥,后者用于分发自签名 X.509 公钥。证书和密钥的生成这里就不过多介绍了,需要的可以自行了解。 ...

二月 12, 2022 · 3 分钟 · overstarry

Log_and_trace

本篇文章讲述了如何将 loki 和 tempo 结合进行分布式追踪。日志和 trace 结合使用的方案有很多,由于 loki 官方自带了 trace 结合的配置,不用进行过多的二次开发,所以这里采用 loki 和 tempo 结合的方案。 loki 和 tempo 是什么就不过多介绍,安装流程也省略。这里主要讲如何配置。 配置 这里我们采用普遍的方案,使用 grafana 来展示日志和 trace。 配置 loki 在 grafana , 打开数据源配置界面,新建 loki 数据源,并且配置好地址,如下图所示点击 Save & Test, 如果配置正确,则会出现 Data source connected and labels found. 标志。 配置 tempo 同配置 loki 一致,新建 grafana 数据源,选择 tempo,配置好相应的 url 数据,点击测试,出现 Data source connected and labels found. 标志,就表示配置成功。 在 tempo 配置页面的底部可以看到一个配置栏目 Trace to logs,可以选择相应的日志数据源,这里我们选择 loki. ...

一月 27, 2022 · 1 分钟 · overstarry

K8s_Finalizers

起因 在我们日常使用 k8s 中,可能会遇到这样的情况:在删除 namespace 时,往往会遇到资源没有被删除的情况,资源处于 terminating 的状态,这时我们该如何解决了,寻找到的解决方法往往是如下: 1 运行以下命令查看处于 terminating 状态的资源 (这里以 namespace 为例): kubectl get namespaces 2 选择一个 Terminating namespace,并查看 namespace 中的 finalizer。运行以下命令: kubectl get namespace <terminating-namespace> -o yaml 得到类似这样的信息: apiVersion: v1 kind: Namespace metadata: creationTimestamp: "2021-01-20T15:18:06Z" deletionTimestamp: "2021-01-21T02:50:02Z" name: <terminating-namespace> resourceVersion: "3249493" selfLink: /api/v1/namespaces/knative-eventing uid: f300ea38-c8c2-4653-b432-b66103e412db spec: finalizers: - kubernetes status: phase: Terminating 3 导出 json 格式到 tmp.json: ...

一月 23, 2022 · 1 分钟 · overstarry

Casbin 学习 1

从本篇文章开始,将由我来开始介绍访问控制框架的基础知识,本篇文章是 casbin 系列文章的第一篇,主要介绍一些 casbin 的概念和基础知识。 概述 casbin 是一个开源的访问控制框架,它的目标是让开发人员可以更加简单的控制访问控制,支持多种访问控制模型,支持多种编程语言 (各种编程语言支持的程度可以查看官网的文档)。 casbin 可以 支持自定义请求的格式,默认的请求格式为{subject, object, action}。 具有访问控制模型 model 和策略 policy 两个核心概念。 支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色。 支持内置的超级用户 例如:root 或 administrator。超级用户可以执行任何操作而无需显式的权限声明。 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo* Casbin 不支持的是: 身份认证 authentication(即验证用户的用户名和密码),Casbin 只负责访问控制。应该有其他专门的组件负责身份认证,然后由 Casbin 进行访问控制,二者是相互配合的关系。 管理用户列表或角色列表。Casbin 认为由项目自身来管理用户、角色列表更为合适,用户通常有他们的密码,但是 Casbin 的设计思想并不是把它作为一个存储密码的容器。而是存储 RBAC 方案中用户和角色之间的映射关系。 工作原理 在 Casbin 中,访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个文件。因此,切换或升级项目的授权机制与修改配置一样简单。您可以通过组合可用的模型来定制您自己的访问控制模型。例如,您可以在一个 model 中结合 RBAC 角色和 ABAC 属性,并共享一组 policy 规则。 adapters 在 Casbin 中,策略存储作为 adapter(Casbin 的中间件) 实现。Casbin 用户可以使用 adapter 从存储中加载策略规则 (aka LoadPolicy()) 或者将策略规则保存到其中 (aka SavePolicy())。为了保持代码轻量级,我们没有把 adapter 代码放在主库中。 ...

一月 12, 2022 · 3 分钟 · overstarry

Go 如何使用私有仓库模块

今天我来讲一讲在 golang 中如何在项目中引用私有仓库吧,在我们的实际生产开发中,往往需要在项目中引用内部代码管理平台上的仓库代码,接下来我来介绍如何在 golang 中使用私有仓库模块。 设置 1 我们的私有代码往往存储在内部的代码管理平台 (如 gitlab, gittee 等) 上,假设我们的地址是 git.xx.vip. 接下来开始设置一些配置项。 2 设置 GOPRIVATE 变量。 我们先设置 GOPRIVATE 环境变量,GOPRIVATE 会将 GOPRIVATE 变量值所匹配的路径前缀视为私有模块,就不会使用代理和进行校验。设置了 GOPRIVATE 变量后,GONOPROXY 和 GONOSUMDB 环境变量 也会接收同样的值。 3 设置 GOINSECURE 变量 我们的 gitlab 等代码管理平台往往没有使用 https 协议,所以我们需要设置 GOINSECURE 变量,GOINSECURE 变量中的值以逗号分隔,其中的每一个值在 go get 时 不会进行 https 协议的校验,只会采用 http 协议。 4 go get 设置完以上步骤后,可以执行 go get 看看效果,具体命令: go get -v git.xx.vip/swords/xkratos 可以看到相应的库已经顺利拉取成功,并且输出了相应的版本信息 参考 https://go.dev/ref/mod https://go.zhangdeman.cn/archives/62430e03.html https://forum.golangbridge.org/t/using-go-get-to-retrieve-modules-packages-from-a-private-server/17896/6 https://github.com/GoogleCloudPlatform/govanityurls

一月 12, 2022 · 1 分钟 · overstarry