Oauth2 - Github
Module
模块
描述
spring-security-oauth2-core
OAuth2 授权框架 + OIDC 核心数据结构及接口
spring-security-oauth2-jose
支持 JOSE 协议组JWT: JSON Web TokenJWS: JSON Web SignatureJWE: JSON Web EncryptionJWK: JSON Web Key
spring-security-oauth2-client
支持 OAuth2 和 OIDC 的客户端
Register application
callback: /login/oauth2/code/github
Config
callback template: {baseUrl}/login/oauth2/code/{registrationId}
12345678910server: port: 9000spring: security: oauth2: client: reg ...
Kubernetes - Dockerfile
Image
镜像由多层 Layer 组成,Layer 是一组只读不可修改的文件,Layer 可以在镜像间共享Image = Layer + Union FS
1234567891011121314$ docker inspect nginx:alpine... "RootFS": { "Type": "layers", "Layers": [ "sha256:e5e13b0c77cbb769548077189c3da2f0a764ceca06af49d8d558e759f5c232bd", "sha256:07099189e7ec257e501d9625507b55e0ea32c330e38c90d8533b3fa2a7a97069", "sha256:fcf860bf48b4e20f24f44ba02115 ...
Kubernetes - Containerization
镜像
只读:依赖的文件系统、依赖库、环境变量、启动参数等
核心解决的问题:应用分发
应用容器化
应用不再直接与 OS 打交道,而是封装成镜像,再交给容器环境去运行
常用命令镜像
命令
作用
docker pull
从远端仓库拉取镜像
docker images
列出当前本地已有的镜像
docker rmi
删除不再使用的镜像
容器12$ docker run -h srv --rm alpine hostnamesrv
1234567891011121314151617181920$ docker run -d nginx:alpine6376e2649ef2d4a6073b977fcc4408f7a3f21b6f32775b42be85711b989dd6ce$ docker run -d --name redis_srv redis2a79d491ecb3108b07df7d369dfe8abc6ac314efc2054951ef7b77e0deba0584$ docker run -it --name ubuntu ubuntu sh# cat /etc/os-r ...
Oauth2 - JWT
Token Type
JWT
资源服务器自解释和自校验,无需再跟授权服务器交互
结构
验签
issue + audience
issue:令牌签发人audience:目标接收人
CodeAuthorization ServerMaven12345678910111213141516171819<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> < ...
Kubernetes - Docker Nature
本质
容器,是一个特殊的隔离环境,能够让进程只看到这个环境内的有限信息,不能对外界环境施加影响隔离的原因:系统安全隔离的实现:namespace + cgroup + chroot(rootfs)
Container vs VM
容器并不是直接运行在 Docker 上,Docker 只是辅助建立隔离环境,让容器基于 Linux 运行
VM 虚拟化出来的是硬件,需要在上面再安装一个 Guest OS 才能运行应用程序,会消耗大量的系统资源
容器则直接利用了下层的计算机硬件和操作系统,非常轻量级,但多个容器共用 OS Kernel,隔离程度不如 VM
实现方式
优势
劣势
VM
虚拟化硬件
隔离程度非常高
资源消耗大,启动慢
Container
直接利用下层的硬件和操作系统
资源利用率高运行速度快
隔离程度较低
Kubernetes - Docker Architecture
Architecture
核心是 Docker daemon
Flow123456789101112131415161718192021222324252627$ docker run hello-worldUnable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-world2db29710123e: Pull completeDigest: sha256:faa03e786c97f07ef34423fccceeec2398ec8a5759259f94d99078f264e9d7afStatus: Downloaded newer image for hello-world:latestHello from Docker!This message shows that your installation appears to be working correctly.To generate this message, Docker took the following st ...
Oauth2 - Authorization Code Flow
Authorization ServerMaven12345678910111213141516171819<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth</groupId> <artifact ...
Spring Security OAuth2 - Authorization Server
授权服务器
Introspection Endpoint:校验 Access Token 的合法性
Spring Security OAuth2 架构
Authorization flowAuthorization Code Flow
Maven12345678<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency><dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId></dependency>
API1234567@Data@Builder@FieldDefaults(level = Acc ...
Oauth2 - Overview
问题域
开放系统间授权
账号密码
不安全
万能钥匙
适用于公司内部
特殊令牌
核心挑战是令牌的生命周期管理
微服务安全
核心是 Token
OAuth2最简向导
正式定义
Token 是核心,可类比为仆从钥匙(给应用授予有限的访问权限,让应用代表用户去访问用户数据)
优劣主要优势
OAuth2 使用代理授权的方式解决密码共享的反模式问题
主要劣势
OAuth2 不是认证协议,而是一个代理授权框架
OAuth2 提供一个宽泛的协议框架,具体安全场景需要定制
主要角色
主要术语
Token 类型
常见误区
典型 Flow
https://www.rfc-editor.org/rfc/rfc6749
Authorization Code Flow
最复杂 + 最安全 + 应用最广泛
Implicit Grant Flow
减少了授权码兑换的过程(通过 Script 解析 Access Token),适用于单页应用(无后端)
Resource Owner Password Credentials Flow
适用于公司内部应用等风险可控的场景
Client Cre ...
Spring Cloud - Load Balancing
实现方式
@LoadBalanced
负载均衡策略概念
实战