Ingress 认证经常使用 聊聊APISIX

  • 电脑网络维修
  • 2024-11-15

身份认证在日常生存当中是十分经常出现的一项性能,大家往常基本都会接触到,Apache APISIX 作为一个 API网关,目前已开启与各种插件性能的适配协作,插件库也比拟丰盛,目前曾经可与少量身份认证关系的插件启动搭配处置,如下图所示。

基础认证插件比如 Key-Auth、Basic-Auth,他们是经过账号明码的方式启动认证。复杂一些的认证插件如 Hmac-Auth、JWT-Auth,如Hmac-Auth 经过对恳求信息做一些加密,生成一个签名,当 API 调用方将这个签名携带到 APISIX,APISIX会以相反的算法计算签名,只要当签名方和运行调用方认证相反时才予以经过。其余则是一些通用认证协定和联结第三方组件启动协作的认证协定,例如OpenID-Connect 身份认证机制,以及 LDAP 认证等。

APISIX 还可以针对每一个 Consumer (即调用方运行)去做不同级别的插件性能。如下图所示,我们创立了两个生产者 ConsumerA、Consumer B,我们将 Consumer A 运行到运行1,则后续运行1的访问将会开启 Consumer A 的这局部插件,例如 IP黑色名单,限度并发数量等。将 Consumer B 运行到运行2 ,由于开启了 http-log 插件,则运行2的访问日志将会经过 HTTP的方式发送到日志系统启动搜集。

basic-auth

首先我们来了解下最便捷的基本认证在 APISIX 中是如何经常使用的。basic-auth 是一个认证插件,它须要与 Consumer一同配合能力上班。参与 Basic Auth 到一个 Service 或 Route,而后 Consumer将其用户名和明码参与到恳求头中以验证其恳求。

首先我们须要在 APISIX Consumer 生产者中参与 basic auth 认证性能,为其指定用户名和明码,我们这里在 APISIXIngress 中,可以经过 ApisixConsumer 资源对象启动性能,比如这里我们为前面的 nexus 实例运行参与一个基本认证,如下所示:

# nexus-basic-auth.yamlapiVersion: apisix.apache.org/v2alpha1kind: ApisixConsumermetadata:name: nexusBauthspec:authParameter:basicAuth:value:username: adminpassword: admin321

ApisixConsumer 资源对象中只要要性能 authParameter 认证参数即可,目前只允许 BasicAuth 与 KeyAuth两种认证类型,在 basicAuth 上方可以经过 value 可间接去性能关系的 username 和 password,也可以间接经常使用 Secret资源对象启动性能,比起明文性能会更安保一些。

而后在 ApisixRoute 中参与 authentication,将其开启并指定认证类型即可,就可以成功经常使用 Consumer去成功关系性能认证,如下所示:

apiVersion: apisix.apache.org/v2beta2kind: ApisixRoutemetadata:name: nexusnamespace: defaultspec:http:- name: rootmatch:hosts:- ops.qikqiak.compaths:- "/nexus*"- "/static/*"- "/service/*"plugins:- name: proxy-rewriteenable: trueconfig:regex_uri: ["^/nexus(/|$)(.*)", "/$2"]- name: redirectenable: trueconfig:regex_uri: ["^(/nexus)$", "$1/"]- name: redirectenable: trueconfig:http_to_https: truebackends:- serviceName: nexusservicePort: 8081authentication:# 开启 basic auth 认证enable: truetype: basicAuth

间接升级上方的资源即可开启 basic auth 认证了,在 Dashboard 上也可以看到创立了一个 Consumer:

而后我们可以启动如下的测试来启动验证:

# 缺少 Authorization header➜ curl -i401 UnauthorizedDate: Tue, 11 Jan 2022 07:44:49 GMTContent-Type: text/plain; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveWWW-Authenticate: Basic realm='.'Server: APISIX/2.10.0{"message":"Missing authorization in request"}# 用户名不存在➜ curl -i -ubar:bar401 UnauthorizedDate: Tue, 11 Jan 2022 07:45:07 GMTContent-Type: text/plain; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveServer: APISIX/2.10.0{"message":"Invalid user key in authorization"}# 成功恳求➜ curl -uadmin:admin321Moved Permanently</title></head><body><center><h1>301 Moved Permanently</h1></center><hr><center>openresty</center></body></html>

consumer-restriction

不过这里大家或许会有一个不懂,在 Route 上方我们并没有去指定详细的一个 Consumer,而后就可以启动Basic Auth 认证了,那假设我们有多个 Consumer 都定义了 Basic Auth 岂不是都会失效的?确实是这样的,这就是 APISIX的成功方式,一切的 Consumer 对启用对应插件的 Route 都会失效的,假设我们只想 Consumer A 运行在 Route A、Consumer B运行在 Route B 上方的话呢?要成功这特性能就须要用到另外一个插件:consumer-restriction。

consumer-restriction 插件可以依据选用的不同对象做相应的访问限度,该插件可性能的属性如下表所示:

其中的 type 字段是个枚举类型,它可以是 consumer_name 或 service_id,区分代表以下含意:

比如如今我们有两个 Consumer:jack1 和 jack2,这两个 Consumer 都性能了 Basic Auth 认证,性能如下所示:

Conumer jack1 的认证性能:

➜ curl-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{"username": "jack1","plugins": {"basic-auth": {"username":"jack2019","password": "123456"}}}'

Conumer jack2 的认证性能:

➜ curl-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{"username": "jack2","plugins": {"basic-auth": {"username":"jack2020","password": "123456"}}}'

如今我们只想给一个 Route 路由对象启用 jack1 这个 Consumer 的认证性能,则除了启用 basic-auth 插件之外,还须要在consumer-restriction 插件中性能一个 whitelist 白名单(当然性能黑名单也是可以的),如下所示:

➜ curl-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"uri": "/index.html","upstream": {"type": "roundrobin","nodes": {"127.0.0.1:1980": 1}},"plugins": {"basic-auth": {},"consumer-restriction": {"whitelist": ["jack1"]}}}'

而后我们经常使用 jack1 去访问我们的路由启动验证:

➜ curl -u jack2019:123456-iHTTP/1.1 200 OK...

反经常常使用 jack2 访问就会认证失败了:

➜ curl -u jack2020:123456-iHTTP/1.1 403 Forbidden...{"message":"The consumer_name is forbidden."}

所以当你只想让一个 Route 对象关联指定的 Consumer 的时刻,记得经常使用 consumer-restriction 插件。

在往常的运行中或许经常使用 jwt 认证的场景是最多的,雷同在 APISIX 中也有提供 jwt-auth 的插件,它雷同须要与Consumer 一同配合能力上班,我们只要要参与 JWT Auth 到一个 Service 或 Route,而后 Consumer将其密钥参与到查问字符串参数、恳求头或 cookie 中以验证其恳求即可。

由于目前 ApisixConsumer 还不允许 jwt-auth 性能,所以须要我们去 APISIX 手动创立一个 Consumer,可以经过APISIX 的 API 启动创立,当然也可以间接经过 Dashboard 页面操作。在 Dashboard 生产者页面点击创立生产者:

点击下一步进入插件性能页面,这里我们须要启用 jwt-auth 这个插件:

在插件性能页面性能 jwt-auth 关系属性,可参考插件文档

可性能的属性如下表所示:

而后提交即可创立成功 Consumer,而后我们只要要在须要的 Service 或许 Route 上开启 jwt-auth 即可,比似乎样还是针对上方的nexus 运行,我们只要要在 ApisixRoute 对象中启用一个 jwt-auth 插件即可:

apiVersion: apisix.apache.org/v2beta2kind: ApisixRoutemetadata:name: nexusnamespace: defaultspec:http:- name: rootmatch:hosts:- ops.qikqiak.compaths:- "/nexus*"- "/static/*"- "/service/*"plugins:- name: jwt-authenable: true- name: redirectenable: trueconfig:http_to_https: true- name: redirectenable: trueconfig:regex_uri: ["^(/nexus)$", "$1/"]- name: proxy-rewriteenable: trueconfig:regex_uri: ["^/nexus(/|$)(.*)", "/$2"]backends:- serviceName: nexusservicePort: 8081

须要留意的是 authentication 属性也不允许 jwt-auth,所以这里我们经过 plugins启动启用,从新升级上方的对象后我们雷同来测实验证下:

➜ curl -i401 UnauthorizedDate: Tue, 11 Jan 2022 08:54:30 GMTContent-Type: text/plain; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveServer: APISIX/2.10.0{"message":"Missing JWT token in request"}

要反常访问我们的服务就须要先启动登录失掉 jwt-auth 的 token,经过 APISIX 的 apisix/plugin/jwt/sign可以失掉:

➜ curl -i200 OKDate: Tue, 11 Jan 2022 09:01:29 GMTContent-Type: text/plain; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveServer: APISIX/2.10.0eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY0MTk3ODA4OX0.rdzMxM4QAKI444c3SC3u3ZqfW9rKnsqrdorLHCGqrQg

要留意上方我们在失掉 token 的时刻须要传递创立生产者的标识 key,由于或许有多个不同的 Consumer 生产者,而后我们将上方取得的 token放入到 Header 头中启动访问:

➜ curl -i-H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY0MTk3ODA4OX0.rdzMxM4QAKI444c3SC3u3ZqfW9rKnsqrdorLHCGqrQg'HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Content-Length: 8802Connection: keep-alive......Expires: 0Server: APISIX/2.10.0<!DOCTYPE html><html lang="en">......

可以看到可以反常访问。雷同也可以放到恳求参数中验证:

➜ curl -i200 OK......

此外还可以放到 cookie 中启动验证:

➜ curl -i--cookie jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyLWtleSIsImV4cCI6MTY0MTk3ODA4OX0.rdzMxM4QAKI444c3SC3u3ZqfW9rKnsqrdorLHCGqrQgHTTP/1.1 200 OK......
  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/9132.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号