Auth_basic_kv 권한 확인 및 Auth Kv Http API 인터페이스

NGINX, 클라우드 네이티브로 진화, All in  OpenNJet 


.필요

현재는 auth_basic_user_file만 지원되며 새 사용자를 추가하고 비밀번호를 변경하려면 파일 내용을 수동으로 수정해야 합니다. 유형을 추가해야 합니다: auth_basic_kv, kv를 사용하여 사용자 이름/비밀번호 저장

• 키는 "auth_basic":{prefix}:{user_name}이고 값은 비밀번호입니다. prefix는 server_name 등을 쉽게 구성할 수 있도록 변수를 지원합니다.

•동적으로 항목을 추가하고, 비밀번호를 변경하고, 삭제도 지원하는 HTTP 인터페이스 제공

2.auth_basic_kv 명령어 설계

이 지시어는 main, server, location,limit_conf 블록에서 구성할 수 있습니다. api_limit_ex를 예로 들면 auth_basic_kv 지시어는 njt_http_auth_basic_module 모듈에 배치됩니다. auth_basic_user_file 지시어와 함께 구성할 수는 없습니다.

   
통사론 auth_basic_kv {접두사}
기본 -
문맥 기본,서버,위치,limit_conf

접두사는 변수이거나 일반 문자열일 수 있습니다. kv에 저장된 실제 비밀번호 형식은 다음과 같습니다. 키: auth_basic:{prefix}:{user_name} 값: 비밀번호(SHA 알고리즘 사용)

예:

• 사용자 이름이 njet이라고 가정하고 $server_name 변수 형식을 사용합니다. (실제 server_name이 www.baidu.com인 경우) kv 메모리의 실제 저장 공간은 다음과 같습니다. 키: auth_basic:www.baidu.com:njet

• 사용자 이름이 njet이고 고정 문자열 test_prefix 형식이 사용된다고 가정하면 kv 메모리의 실제 저장 공간은 다음과 같습니다. 키: auth_basic:test_prefix:njet

#变量格式
api_limit_except GET {
   auth_basic "OpenNJet AUTH API";
   auth_basic_kv  $server_name;
}

#字符串格式
api_limit_except GET {
   auth_basic "OpenNJet AUTH API";
   auth_basic_kv  test_prefix;
}

메모:

Http 요청이 오면 변수인 경우 해당 변수를 실제 값으로 변환한 후 kv db에서 검색하게 됩니다. 따라서 kv db에 저장된 실제 변수 값은 모두 변수가 아닙니다.

3. 비밀번호 http API 인터페이스 디자인

새로운 njt_http_auth_api_module을 추가합니다. 다른 필수 API 모듈(제어 플레인은 /api 입구를 통해 구성됨)과 마찬가지로 http API 인터페이스를 제공하고 비밀번호 추가, 삭제 및 수정 기능을 제공합니다: /api/v1/auth_kv/{ type} type: [password|role|login]은 예약되어 있으며, 향후에는 role 역할과 로그인을 조작할 수 있습니다.

3.1 비밀번호 인터페이스 설정:

PUT:/api/v1/auth_kv/password 본문의 형식은 다음과 같습니다.

{
    "prefix": "www.baidu.com",    #对应上面$server_name变量,此处是实际的变量取值
    "user_name": "njet",
    "password": "123456"
}

或者

{
    "prefix": "test_prefix",    #此处是明确的字符串前缀
    "user_name": "njet",
    "password": "123456"
}
  에러 코드 에러 메시지
성공률을 높이다 0 성공
사용자가 이미 존재합니다 4 사용자가 존재했습니다
실패 증가 4 비밀번호 추가 오류
매개변수에 null 값이 있습니다. 접두사, 사용자 이름 및 비밀번호는 비워둘 수 없습니다.
매개변수가 잘못되었습니다. 특정 json 오류가 발생합니다.
비밀번호 암호화 실패 4 비밀번호 암호화 오류

3.2 비밀번호 수정 인터페이스:

패치:/api/v1/auth_kv/password/{접두사}/{user_name}

#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet

或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet

본문은 다음과 같은 형식을 갖습니다.

{
    "password": "123456"
}
  에러 코드 에러 메시지
수정되었습니다. 0 성공
사용자가 존재하지 않습니다 4 사용자가 존재하지 않습니다
편집에 실패하다 4 비밀번호 수정 오류
매개변수에 null 값이 있습니다. 접두사, 사용자 이름 및 비밀번호는 비워둘 수 없습니다.
매개변수가 잘못되었습니다. 특정 json 오류가 발생합니다.
비밀번호 암호화 실패 4 비밀번호 암호화 오류

3.3 비밀번호 삭제 인터페이스:

삭제:/api/v1/auth_kv/password/{접두사}/{user_name}

#变量取值
/api/v1/auth_kv/password/www.baidu.com/njet

或者
#明确字符串前缀
/api/v1/auth_kv/password/test_prefix/njet

반환 값

  에러 코드 에러 메시지
사용자가 삭제되었습니다. 0 성공
사용자가 존재하지 않습니다 4 사용자가 존재하지 않습니다
사용자 삭제 실패 4 삭제 오류

4. 테스트

4.1 테스트 구성(제어 플레인 구성 api_limit_just 블록 테스트를 예로 사용):

테스트용 예시로 Range API 인터페이스에 대한 권한 확인 추가(고정 문자열 접두사) 테스트용 예시로 SSL API 인터페이스에 대한 권한 확인 추가(변수 접두사 사용)

Ctrl.conf

...
load_module modules/njt_http_range_api_module.so;  #以range api 设置权限验证普通字符串前缀为例测试
load_module modules/njt_http_ssl_api_module.so;  #以range api 设置权限验证变量前缀为例测试
load_module modules/njt_http_auth_api_module.so;   #auth kv 模块加载
...

http {
    server {
        listen       8081;
        server_name   www.test.com;           #下面使用$server_name变量测试
        
        location /api {
            dyn_module_api;

            api_limit_except  /v1/range PUT {
               auth_basic "OpenNJet range API";
               auth_basic_kv test_kv;       #range 使用固定前缀字符串测试
            }

            api_limit_except  /v1/ssl PUT {
               auth_basic "OpenNJet ssl API";
               auth_basic_kv $server_name;  #ssl 使用变量前缀测试
            }
        }
        
        location /doc {
            doc_api;
        }
    }
}

4.2 범위 고정 문자열 접두사 테스트(사용자 이름: njet 비밀번호 123456)

PUT 사용자 이름 및 비밀번호를 추가합니다. 초기 테스트에는 njet 사용자 및 비밀번호 123456이 없습니다. 범위 API 가져오기 인터페이스에 액세스하고 비밀번호를 입력하라는 메시지가 나타나면 njet/123456을 입력하면 확인이 실패합니다.

인증 구성, njet/123456을 통해 사용자 이름 및 비밀번호 구성

범위 가져오기 인터페이스를 다시 방문하여 njet/123456을 입력하면 확인이 성공적으로 통과됩니다.

패치 비밀번호 변경 테스트

범위 가져오기 인터페이스를 다시 방문하고 njet/12345를 사용하여 실패합니다.

njet/654321 사용, 확인 통과

DELETE 비밀번호 삭제 비밀번호 삭제 테스트

범위에 다시 액세스하고 실패합니다.

 

4.3 변수 접두어를 사용한 SSL 테스트(사용자 이름: SSL 비밀번호 123456)

PUT 사용자 이름과 비밀번호를 추가하세요. 처음에 SSL 사용자와 비밀번호 123456이 없는지 테스트하세요. ssl get 인터페이스에 액세스하고 비밀번호를 입력하세요. 확인이 실패합니다.

인증 구성 SSL/123456을 통해 사용자 이름과 비밀번호를 구성하고 www.test.com을 접두사로 사용합니다.

SSL get 인터페이스에 다시 액세스하고 ssl/123456을 입력하면 확인이 성공적으로 통과됩니다.

패치 비밀번호 변경 테스트

SSL get 인터페이스에 다시 액세스하고 ssl/12345를 사용하면 실패합니다.

SSL/654321 사용, 확인 통과

DELETE 비밀번호 삭제 비밀번호 삭제 테스트

SSL에 다시 액세스하지 못했습니다.

NJet 애플리케이션 엔진은 커널 재구성을 통해  고유한 런타임 동적 구성 로딩 기능을 달성하며 차세대 고성능 웹 애플리케이션 엔진 입니다 . NJet은 고성능 데이터 플레인 처리 기능을 갖추고 있으며 NJet의 고유한 부조종사 CoPilot 서비스 프레임워크를 통해 클러스터링, 고가용성, 활성 상태 확인 및 선언적 API와 같은 여러 보조 기능을 예약하여 기능 확장을 촉진하고 관리/제어 기능 쌍을 분리합니다. 데이터 플레인에 미치는 영향까지 NJet 애플리케이션 엔진의 성능은 CNCF에서 권장하는 Envoy 애플리케이션 엔진의 3배를 초과합니다. 메일 그룹 공식 홈페이지   

알려지지 않은 오픈 소스 프로젝트가 얼마나 많은 수익을 가져올 수 있습니까? Microsoft의 중국 AI 팀은 수백 명의 사람들을 모아 미국으로갔습니다. Huawei는 Yu Chengdong의 직업 변경이 15년 동안 "FFmpeg Pillar of Shame"에 못 박혔다 고 공식 발표했습니다. 이전에는 그랬지만 오늘은 우리에게 감사해야 합니다.— Tencent QQ Video가 과거의 굴욕을 복수한다고요? Huazhong University of Science and Technology의 오픈 소스 미러 사이트가 외부 액세스 보고를 위해 공식적으로 공개되었습니다 . Django는 여전히 74%의 개발자가 선택한 제품입니다. Zed 편집자는 유명한 오픈 소스 회사의 전직 직원이었습니다 . 소식을 전했습니다: 기술 리더는 부하 직원의 도전을 받은 후 격노하고 무례하게 행동하여 해고되었으며 임신했습니다. 여직원 Alibaba Cloud가 공식적으로 Tongyi Qianwen 2.5를 출시했습니다. Microsoft는 Rust Foundation에 100만 달러를 기부했습니다.
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/6606114/blog/11121312