技术干货 | 实现集中式身份认证管理的案例

Authing 运用集成网关赋予老旧运用快速集成 Authing 身份云产品的能力。在扩充身份认证办法的一起,保护原有系统资源免受不合法侵害。

经过 Authing 集成 Traefik(一个开源的能够使得服务发布变得轻松风趣的边缘路由器)完成单点登录,处理身份办理混乱,节约企业用户数据跨运用办理本钱和信息保护本钱。

01

项目介绍

关于 Authing

Authing 是国内首款以开发者为中心的全场景身份云产品,集成了全部干流身份认证协议,为企业和开发者供给完善安全的用户认证和拜访办理服务。以「API First」作为产品基石,把身份范畴全部常用功用都进行了模块化的封装,经过全场景编程语言 SDK 将全部能力 API 化供给给开发者。一起,用户能够灵活地运用 Authing 开放的 RESTful APIs 进行功用拓展,满足不同企业不同事务场景下的身份办理需求。

关于 Traefik

Traefik 是一个开源的能够使得服务发布变得轻松风趣的边缘路由器。它负责接收你系统的恳求,然后运用适宜的组件来对这些恳求进行处理。

除了众多功用之外,Traefik 异乎寻常之处还在于它会主动发现适合你服务的装备。当 Traefik 在检查你的服务时,会找到服务的相关信息并找到适宜的服务来满足对应的恳求。

Traefik 兼容全部干流的集群技术,比方 Kubernetes,Docker,Docker Swarm,AWS,Mesos,Marathon 等等;而且能够一起处理多种办法(甚至能够用于在裸机上运行的比较旧的软件)。

运用 Traefik,不需求保护或许同步一个独立的装备文件:因为全部都会主动装备,实时操作的(无需从头发动,不会中止连接)。运用 Traefik,你能够花更多的时刻在系统的开发和新功用上面,而不是在装备和保护作业状况上面花费大量时刻。

02

什么是会集式身份认证?

传统身份认证

在传统认证形式下,各个后端运用服务需求独自开发功用以支撑身份认证功用,例如与身份供给商进行交互、获取用户的身份信息等功用。

会集式身份认证

技术干货 | 实现集中式身份认证管理的案例

与传统认证形式不同,会集身份认证形式把用户认证从运用服务中抽离了出来。

以 Traefik 为例,会集认证的流程如上图所示:首先由用户发起恳求(request),然后由前置的网关负责用户认证流程,与身份供给方对接,向身份供给方发送身份认证(authorization)恳求。身份供给方回来用户身份信息(user info)。网关完结用户身份识别后,将用户身份信息经过恳求头的形式转发至后端运用。

会集式身份认证办理的长处

相比较传统认证形式,会集认证形式下有如下长处:

  • 简化运用开发流程,降低开发运用作业量和保护本钱,防止各个运用重复开发身份认证逻辑。
  • 进步事务的安全性,会集身份认证形式在网关层面能够及时拦截未经身份认证的恳求,保护后端的运用。

一起结合 Authing 强壮的身份认证办理功用,可完成如下功用:

  • 经过操控台对身份认证服务进行生命周期办理,包括创立、启用、禁用等。
  • 供给实时、可视化的运用监控,包括:接口恳求次数、接口调用推迟和接口过错信息,而且进行实时告警告知。
  • 会集式日志,能够方便地检查用户登录、登出以及对运用的调整和修正信息。

03

装备办法

  1. 单击“创立”,创立一个 Authing 运用。
    技术干货 | 实现集中式身份认证管理的案例
  2. 设置登录 URL 和运用名称,下边以 traefik 为例。
    技术干货 | 实现集中式身份认证管理的案例
  3. 设置登录回调 URL。 在认证过程中,Authing 将会回绝除装备以外的回调 URL,traefik-forward-auth 中心件默许会回调到 _oauth 路由下,然后我接下来的示例中会运用 whoami.localhost 这个域名作为我的运用域名,所以这里装备 whoami.localhost/_oauth 登录回调 URL 能够装备多个,中心用英文逗号分隔。

技术干货 | 实现集中式身份认证管理的案例

技术干货 | 实现集中式身份认证管理的案例

  1. Traefik 需求更改授权装备 id_token 签名算法 RS256 点击保存。
    技术干货 | 实现集中式身份认证管理的案例
  2. 创立用户(可选)。在用户列表页面,创立用户,账号密码分别为 user1/user1,而且能够在「用户信息-授权办理」页面中设置是否允许运用的拜访(默许为允许)。
    技术干货 | 实现集中式身份认证管理的案例

技术干货 | 实现集中式身份认证管理的案例

  1. 拜访运用页面,获取以下装备,装备 Traefik OpenID Connect 时需求供给这些信息:
  • App ID:OIDC client ID,即运用的 ID。与下文的{PROVIDERS_OIDC_CLIENT_ID} 对应。
  • App secret:OIDC client secret,即运用密钥。与下文{PROVIDERS_OIDC_CLIENT_SECRET} 对应。
  • Issuer:OIDC Issuer。与下文的 {PROVIDERS_OIDC_ISSUER_URL} 对应。

技术干货 | 实现集中式身份认证管理的案例

技术干货 | 实现集中式身份认证管理的案例

装置 Docker 和 Docker Compose

假如你现已装置了 Docker 和 Docker Compose,能够越过此过程。

假如你受限于国内服务器缓慢的网速,而且运用的是 Ubuntu 服务器,咱们供给了以下办法装置 Docker 和 Docker Compose 的办法:

aptupdate
aptinstall-yunzip
wgethttps://download.authing.cn/docker.zip
unzipdocker.zip
cddocker
sudodpkg-idocker-ce-cli_19.03.9_3-0_ubuntu-focal_amd64.deb
sudodpkg-icontainerd.io_1.3.7-1_amd64.deb
sudodpkg-idocker-ce_19.03.9_3-0_ubuntu-focal_amd64.deb

最终运用 docker ps 检验装置是否成功。

wgethttps://download.authing.cn/docker-compose-Linux-x86_64
mvdocker-compose-Linux-x86_64/usr/local/bin/docker-compose
chmod+x/usr/local/bin/docker-compose

最终运用 docker-compose -v 检验装置是否成功。

装置 Traefik

  1. 创立 traefik 目录 :
mkdirtraefik
  1. 创立一个文件:docker-compose.yaml
version:'3'
#docker通讯假如发动报错提示找不到运用@docker
#执行命令dockernetworkcreatetraefik
networks:
traefik:
external:true
services:
traefik:
image:traefik:v2.2
#敞开webUI而且告知Traefik监听Docker
command:--api.insecure=true--providers.docker
#端口映射这个80端口是网关入口比方下边的whoami服务
#给他分配的域名是whoami.localhost那么直接拜访http://whoami.localhost就能够
#假如这里分配的是8081之类的其下方的运用都需求带端口比方http://whoami.localhost:8081
#8086是traefikwebUI地址
ports:
-'80:80'
-'8086:8080'
volumes:
-/var/run/docker.sock:/var/run/docker.sock
networks:
-traefik
whoami:
image:containous/whoami
labels:
#routers.后边跟的是services的名称rule是给当前运用绑定域名或许途径
#每个Host需求装备到Authing的TraefikExternalURL参数中,有多个服务的时分用英文逗号分隔。
-'traefik.http.routers.whoami.rule=Host(`whoami.localhost`)'
#中心件运用traefik-forward-auth
-'traefik.http.routers.whoami.middlewares=traefik-forward-auth'
networks:
-traefik
traefik-forward-auth:
image:thomseddon/traefik-forward-auth:2
ports:
-'4181:4181'
networks:
-traefik
environment:
#登录办法OIDC下边三个参数授权等信息在Authing运用登录装备中见下方图
-DEFAULT_PROVIDER=oidc
-PROVIDERS_OIDC_ISSUER_URL={PROVIDERS_OIDC_ISSUER_URL}
-PROVIDERS_OIDC_CLIENT_ID={PROVIDERS_OIDC_CLIENT_ID}
-PROVIDERS_OIDC_CLIENT_SECRET={PROVIDERS_OIDC_CLIENT_SECRET}
#更多参数见附录1
-SECRET=something-random
#INSECURE_COOKIEisrequiredifnotusingahttpsentrypoint
-INSECURE_COOKIE=true
-LOG_LEVEL=debug
labels:
#address=http://traefik-forward-auth:4181指的是traefik-forward-auth运用的4181端口
#选项界说外部身份验证服务器地址
#authResponseHeaders选项界说要从外部身份验证服务器复制到恳求的标头列表
#trustForwardHeader选项设置true表示信任全部现有的X-Forwarded-*标头
#更多参数见附录1
-'traefik.http.middlewares.traefik-forward-auth.forwardauth.address=http://traefik-forward-auth:4181'
-'traefik.http.middlewares.traefik-forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User'
-'traefik.http.services.traefik-forward-auth.loadbalancer.server.port=4181'

技术干货 | 实现集中式身份认证管理的案例

技术干货 | 实现集中式身份认证管理的案例

最终运用 docker-compose up -d 发动 Traefik。

traefik-forward-auth

traefik-forward-auth 是 Traefik 的一个中心件,在装备后在拜访 Traefik 下边运用时会先去执行中心件服务,traefik-forward-auth 会依据装备去调用 OIDC 协议登录。

04

Q & A

怎么给一个服务装备多个域名

labels:
-"traefik.prod.frontend.rule=Host:whoami.xiange.tech"
-"traefik.another.frontend.rule=Host:who.xiange.tech"
-"traefik.dev.frontend.rule=Host:whoami.xiange.me"

Https 相关装备

相关链接 :doc.traefik.io/traefik/htt…

https 现已成为一个现代网站的标配,以至于当一个网站没有 https 时,某些浏览器都会把它标识为不安全。而除了安全方面,https 对网站的 SEO 也影响很多,而关于某些新式的浏览器 API,也只要在 https 下才干运用。不管怎么说,https 也成为一个网站的刚需。

而当你运用了 traefik 作为反向代理时,你能够装备 ACME 主动为域名供给证书,只需几行即可处理问题。免费的证书,当然是经过 Let's Encrypt 来处理。

ACME 装备‍‍‍‍‍‍‍‍

经过它能够很方便地主动签发证书而且主动续期,咱们在 traefik.toml 中进行相关装备:

[certificatesResolvers.le.acme]
email="you-email"
storage="acme.json"
[certificatesResolvers.le.acme.tlsChallenge]

其中,storage 指寄存证书的位置。

Traefik 容器装备

在装备好 traefik.toml 装备完结后,咱们需求修正 traefik 容器发动的相关装备: 露出 443 端口

挂载 acme.json,耐久化证书

因为 acme.json 是一个文件,咱们先在宿主机中创立它:

touchacme.json

容器,改动装备文件如下:

reverse-proxy:
image:traefik:v2.0
ports:
-"443:443"
volumes:
-./traefik.toml:/etc/traefik/traefik.toml
-./acme.json:/acme.json

whoami:
labels:
-traefik.http.routers.whoami.tls=true
-traefik.http.routers.whoami.tls.certresolver=le

服务发动后,运用 curl 测验服务是否正常作业,咱们能够看到 X-Forwarded-Protohttps,装备成功。

$curlhttps://whoami.shanyue.tech
Hostname:c9c3cc850e2b
IP:127.0.0.1
IP:172.18.0.2
RemoteAddr:172.18.0.3:35320
GET/HTTP/1.1
Host:whoami.shanyue.tech
User-Agent:curl/7.29.0
Accept:*/*
Accept-Encoding:gzip
X-Forwarded-For:59.110.159.217
X-Forwarded-Host:whoami.shanyue.tech
X-Forwarded-Port:443
X-Forwarded-Proto:https
X-Forwarded-Server:9d783174aca9
X-Real-Ip:59.110.159.217

出现 oops

技术干货 | 实现集中式身份认证管理的案例

当前情况是你的运用地址没有在 Authing 中装备:

技术干货 | 实现集中式身份认证管理的案例

无限循环重定向(装备过错,手动触发鉴权地址)

需求在 traefik-forward-auth 服务下的 labels 增加:

"traefik.http.routers.traefik-forward-auth.middlewares=traefik-forward-auth"

装备成功示例

  1. 拜访 whoami.localhost 后,假如没有登录授权,因为现已敞开了 OpenID Connect 插件,所以页面被重定向到 Authing 登录页面 (可在 Authing 操控台中 「运用-品牌化」对该页面进行定制)。
    技术干货 | 实现集中式身份认证管理的案例
  2. 输入用户在 Authing 注册的账号密码,或许在过程一中创立的用户 user1/user1 ,单击“登录”,登录 Authing 账户。
  3. 登录成功之后,能成功拜访到 whoami.localhost 示例运用。
    技术干货 | 实现集中式身份认证管理的案例
  4. 在 Authing 操控台中的 「审计日志-用户行为日志」中能够观察到 user1 用户在 2022.04.15 11:57:51 成功登录。
    技术干货 | 实现集中式身份认证管理的案例
  5. 从头创立一个邮箱账号并登录,能够看到邮箱现已回显出来。
    技术干货 | 实现集中式身份认证管理的案例
    技术干货 | 实现集中式身份认证管理的案例

关于 Authing

Authing 身份云国内首款以开发者为中心的全场景身份云产品,集成了全部干流身份认证协议,为企业和开发者供给完善安全的用户认证和拜访办理服务,已协助 20,000+ 家企业和开发者构建标准化的用户身份系统。

Authing 既是客户的支撑者,也是客户的产品专家和战略参谋,更是值得信任的合作伙伴。咱们供给全球化的身份专家支撑团队,经过网络或电话,7*24 小时不间断支撑。Authing 的协助中心供给最新的技术知识库、商业案例以及与您的同行和 Authing 专家联络的时机。无论您何时需求咱们,Authing 的支撑团队总能最快呼应。

2022 年,Authing 将秉承着致力于客户成功的初衷,协助推进客户重要事务,为完成身份连通、打破数据孤岛而不懈努力。

点击此处了解更多职业身份办理

「处理方案」以及「最佳实践案例」