文件服务器鉴权,服务鉴权

article/2025/9/19 7:17:29

使用kmse实现服务的权限校验

通过一个简单的实例说明开发者如何通过kmse进行服务间的权限校验。

一、准备客户端和服务端两个demo

这里演示如何快速实践服务鉴权功能。假如现在有两个微服务 auth-client 和 auth-server,想实现 auth-client 调用 auth-server 时,auth-server 对请求做鉴权。参考服务开发文档,下载auth-server和auth-client两个demo。

da9f495e6008421211160e71b15af94c.png

aef33f4a18ffb9865344207f7af3d5e7.png

查看依赖,实践服务鉴权只需要依赖以下maven组件,调用端和被调用端都只需要如下依赖。

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-openfeign

com.ksyun.kmse

spring-cloud-kmse-starter-authentication

${version}

因为auth-server是被调用方,所以在auth-server的bootstrap.yaml文件中写入鉴权配置,配置中两个版本属性(VERSION,subset),两个服务名属性(spring.application.name,auth-policy.http[0].route[0].destination.host)必须一致。配置的意思是创建一个名称为auth-rule-1的鉴权规则,该条规则的意思是禁止应用名称前缀为“auth-client”的请求来访问auth-server应用。

VERSION: v1

auth-policy:

http:

- match:

- applicationName:

endUser:

prefix: "auth-client"

name: auth-rule-1

route:

- destination:

host: auth-server

subset: v1

type: black-list

spring:

application:

name: auth-server

server:

port: 8080

在auth-client的yaml中写入鉴权需要的参数,这些参数在系统中会自动注入,现在手工填写,应用名称为auth-client,版本为v1:

VERSION: v1

server:

port: 8081

spring:

application:

name: auth-client

准备测试的java代码,auth-server端提供服务的controller:

package com.ksyun.kmse.controller;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RequestMapping({"/server"})

@RestController

public class AccountController {

private static final Logger log = LoggerFactory.getLogger(AccountController.class);

public AccountController() {

}

@RequestMapping({"/{id}"})

public String account(@PathVariable("id") Integer id) {

log.info("调用server " + id);

return id + "";

}

}

auth-client端提供的远程调用client:

package com.ksyun.kmse.client;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "auth-server", url = "http://127.0.0.1:8080")//如果使用注册中心可以不使用显式的url配置

public interface OrderClient {

@GetMapping("/server/{id}")

String getById(@PathVariable Integer id);

}

auth-client端提供的测试访问入口controller:

package com.ksyun.kmse.controller;

import com.ksyun.kmse.client.OrderClient;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RequestMapping({"/client"})

@RestController

public class AccountController {

private static final Logger log = LoggerFactory.getLogger(AccountController.class);

public AccountController() {

}

@Autowired

private OrderClient server;

@GetMapping({"/{id}"})

public String account(@PathVariable("id") Integer id) {

log.info("调用参数 " + id);

String result = server.getById(id);

log.info("远程调用结果 " + result);

return result;

}

}

至此两个测试应用准备完毕。

二、对服务鉴权进行测试

步骤一中的鉴权配置含义是"不允许applicationname前缀等于’auth-client’的请求访问"。 调用auth-client的测试接口 http://127.0.0.1:8081/client/1。

a5325c08e884e18e42e5ddd6f9a9669b.png

发现auth-server返回http验证码为403。

将auth-server的配置改为如下:

VERSION: v1

auth-policy:

http:

- match:

- applicationName:

endUser:

prefix: "Aclient"

name: auth-rule-1

route:

- destination:

host: auth-server

subset: v1

type: black-list

spring:

application:

name: auth-server

这个配置的含义是"不允许applicationname前缀等于Aclient的请求访问"。 重启auth-server后,再次调用测试接口,返回http状态码为200。

881e20dbefaf154081dc0aba1a9cb0b8.png

将auth-server的配置改为如下,测试后缀拦截:

VERSION: v1

auth-policy:

http:

- match:

- applicationName:

endUser:

suffix: "ent"

name: auth-rule-1

route:

- destination:

host: auth-server

subset: v1

type: black-list

spring:

application:

name: auth-server

这个配置的含义是"不允许applicationname后缀等于ent的请求访问"。 重启auth-server后,再次调用测试接口,返回http状态码为403,请求被拦截。

5d91df3f84ec8ce266df5a8599fc4e7b.png

依次类推还有如下的请求场景:

#匹配请求来源url

auth-policy:

http:

- match:

- APIPath: "/auth-server/1"

#匹配请求来源ip

auth-policy:

http:

- match:

- IP: "127.0.0.1"

#匹配请求http方法

auth-policy:

http:

- match:

- Method: "GET"

#匹配应用版本

auth-policy:

http:

- match:

- applicationVersion: "v1"

#前缀匹配

auth-policy:

http:

- match:

- applicationName:

endUser:

prefix: "a"

#后缀匹配

auth-policy:

http:

- match:

- applicationName:

endUser:

suffix: "b"

#精准匹配

auth-policy:

http:

- match:

- applicationName:

endUser:

exact: "c"

#正则匹配,例如正整数

auth-policy:

http:

- match:

- applicationName:

endUser:

regular: "[1-9]\d*"


http://chatgpt.dhexx.cn/article/yniZVv8F.shtml

相关文章

前后端常见的几种鉴权方式

最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。 目前我们常用的鉴权有四种: HTTP Basic Authenticationsession-cookieToken 验证OAuth(开放授权)一.HTTP Basic Authentication 这…

鉴权的4种基本方法

一、基于服务器常出现的问题 Seesions: 每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。 可扩展性: 由于sessions存放在服务器内存中,伴随而来的是可…

什么是鉴权?一篇文章带你了解postman的多种方式

目录 一、什么是鉴权? 二、postman鉴权方式 一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就…

10 分钟带你了解鉴权那些事

前言: 鉴权是自动化测试路上的拦路虎,相信大部分同学都深有体会,今天我们就讲一讲这个鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指是指验证用户是否拥有访问系统的权利。为什么要鉴权:…

常见的鉴权方式简述

一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。 为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非法用户接入网络,被骗取关键信息 二、鉴权方式 Basic Auth basic au…

笔记——什么是鉴权

前言 鉴权是自动化测试路上的拦路虎;故以此记录鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非…

ftok()函数解析

ftok 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。 表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 <sys/msg.h> …

ftok()函数的使用

在上一篇文章中&#xff0c;Mayuyu讲述了共享内存的原理以及使用方法。在创建共享内存之前&#xff0c;必须指定一个ID值&#xff0c;而这个ID值通常是通过现在要讲的ftok()函数得到。ftok()函数原型如下 其中参数fname是指定的文件名&#xff0c;这个文件必须是存在的而且可以…

linux ftok函数的使用

ftok API #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id); ftok根据路径名&#xff0c;提取文件信息&#xff0c;再根据这些文件信息及project ID合成key&#xff0c;该路径可以随便设置。该路径是必须存在的&#x…

ftok与fork

ftok函数编辑 系统建立IPC通讯 &#xff08; 消息队列、 信号量和 共享内存&#xff09; 时必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 2ftok原型编辑 头文件 #include < sys/types.h> #include <sys/ipc.h> 函数原型&#xff1a; key_t f…

Linux下的ftok()函数

linux ftok&#xff08;&#xff09;函数 - 清清飞扬 - 博客园 (cnblogs.com) 系统建立IPC通讯&#xff08;如消息队列、共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型如下&#xff1a; key_t ftok( char * fname, int i…

Linux中ftok函数介绍

函数原型&#xff1a; *key_t ftok(const char fname, int id); 功能&#xff1a;系统建立IPC通讯&#xff08;如消息队列&#xff0c;共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到 返回值&#xff1a;成功返回一个key_t值&#xf…

linux ftok()

系统建立IPC通讯&#xff08;如消息队列、共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型如下&#xff1a; C代码 key_t ftok( char * fname, int id) key_t ftok( char * fname, int id) fname就时你指定的文件名&a…

Linux中ftok函数详解

在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID&#xff0c;那么key是如何生成的呢&#xff1f; 通过函数ftok生成 #include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_id);参数&#xff1a; pathname: …

ftok说明

文章一&#xff1a; ftok函数 系统建立IPC通讯&#xff08;消息队列、信号量和共享内存&#xff09;时必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型 头文件&#xff1a; #include <sys/types.h> #include <sys/ipc.h> 如下&…

ftok()函数深度解析

关于ftok函数&#xff0c;先不去了解它的作用来先说说为什么要用它&#xff0c;共享内存&#xff0c;消息队列&#xff0c;信号量它们三个都是找一个中间介质&#xff0c;来进行通信的&#xff0c;这种介质多的是。就是怎么区分出来&#xff0c;就像唯一一个身份证来区分人一样…

linux进程间通信--消息队列相关函数(ftok)详解

ftok 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。 表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 <sys/msg.h> &l…

19-逆波兰表达式求值(栈)

逆波兰表达式求值 1.题目描述2. 思路3.代码实现3.1 c实现 4. 复杂度分析 1.题目描述 LeetCode题目链接 逆波兰表达式由波兰的逻辑学家卢卡西维兹提出。逆波兰表达式的特点是&#xff1a;没有括号&#xff0c;运算符总是放在和它相关的操作数之后。因此&#xff0c;逆波兰表达式…

逆波兰表达式求值

二元运算符的表达式定义为&#xff1a;(操作数) (运算符) (操作数) &#xff0c;其中操作数也可以为表达式。 在计算机中&#xff0c;根据运算符所在的不同位置来命名&#xff0c;表达式可以有如下三种不同的表示方法&#xff1a; 记表达式为&#xff1a;Exp S1 OP S2&a…

逆波兰表达式 c++

题目&#xff1a; 逆波兰表达式定义&#xff1a;1&#xff09;一个数是一个逆波兰表达式值为该数 2&#xff09;运算符 逆波兰表达式 逆波兰表达式 是其表达式&#xff0c;只有两个逆波兰表达式的值运算的结果 思路&#xff1a;用递归解决递归形式问题。 #include <iostr…