返回

Nacos 权限认证的妙用——控制配置服务的访问权限

后端

默认情况下获取 Nacos 中的配置是不需要权限认证的,这在绝大多数仅内网可访问的场景下是可以接受的。但当我们需要将 Nacos 部署在公网上或者需要对配置服务的访问进行更精细的控制时,就需要启用权限认证功能了。

Nacos 支持多种类型的权限认证机制,包括:

  • 基于 HTTP Basic 认证的权限认证
  • 基于 Token 的权限认证
  • 基于 OIDC(OpenID Connect)的权限认证

本文将分别介绍这三种权限认证机制的配置和使用。

基于 HTTP Basic 认证的权限认证

HTTP Basic 认证是一种最简单的权限认证机制,只需要在请求头中携带用户名和密码即可。

要在 Nacos 中启用基于 HTTP Basic 认证的权限认证,需要在配置文件中添加如下配置项:

nacos:
  auth:
    enabled: true
    type: http_basic

添加上述配置后,Nacos 会在启动时生成一个默认的用户名和密码,并将其存储在日志文件中。

使用方法:
在请求 Nacos API 时,需要在请求头中携带 Authorization 字段,其值为 Basic ,后跟用户名和密码的 Base64 编码字符串。

例如:

curl -H "Authorization: Basic YWRtaW46cGFzc3dvcmQ=" http://localhost:8848/nacos/v1/console/namespaces

基于 Token 的权限认证

基于 Token 的权限认证是一种更加灵活的权限认证机制,它允许管理员创建和管理不同的 Token,并将其分配给不同的用户或应用。

要在 Nacos 中启用基于 Token 的权限认证,需要在配置文件中添加如下配置项:

nacos:
  auth:
    enabled: true
    type: token

添加上述配置后,Nacos 会在启动时生成一个默认的 Token,并将其存储在日志文件中。

使用方法:

在请求 Nacos API 时,需要在请求头中携带 Authorization 字段,其值为 Bearer ,后跟 Token 字符串。

例如:

curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8848/nacos/v1/console/namespaces

基于 OIDC(OpenID Connect)的权限认证

基于 OIDC(OpenID Connect)的权限认证是一种更加安全的权限认证机制,它允许管理员将 Nacos 与第三方身份提供商集成,并通过第三方身份提供商来验证用户的身份。

要在 Nacos 中启用基于 OIDC(OpenID Connect)的权限认证,需要在配置文件中添加如下配置项:

nacos:
  auth:
    enabled: true
    type: oidc
    oidc:
      discoveryUrl: https://example.com/.well-known/openid-configuration
      clientId: my-client-id
      clientSecret: my-client-secret

添加上述配置后,Nacos 会在启动时生成一个默认的 OIDC(OpenID Connect)配置,并将其存储在日志文件中。

使用方法:

在请求 Nacos API 时,需要在请求头中携带 Authorization 字段,其值为 Bearer ,后跟 OIDC(OpenID Connect) Token 字符串。

例如:

curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8848/nacos/v1/console/namespaces

总结

Nacos 支持多种类型的权限认证机制,管理员可以根据自己的需要选择合适的权限认证机制。

启用权限认证后,可以有效地提高 Nacos 的安全性,防止未经授权的用户访问 Nacos 的配置数据。

案例演示:

考虑这样一个场景:公司有一个名为 production 的环境,其中有一个名为 nacos 的 Nacos 服务,该服务存储着各种生产环境的配置信息。

为了提高安全性,公司决定对 nacos 服务启用权限认证。

他们选择使用基于 Token 的权限认证机制,并创建了两个 Token:

  • token1:授予开发人员访问 production 环境的权限
  • token2:授予运维人员访问 production 环境的权限

当开发人员需要访问 production 环境的配置信息时,他们需要在请求头中携带 Authorization 字段,其值为 Bearer token1

当运维人员需要访问 production 环境的配置信息时,他们需要在请求头中携带 Authorization 字段,其值为 Bearer token2

这样,公司就有效地控制了对 production 环境配置信息的访问权限。