Сервер аутентификации и авторизации (сервер аутентификации и авторизации)
✅ Реализовано ♻️ В процессе реализации ❗️ Ожидается реализация
✅ OAuth2
✅ OpenIDConnect
♻️ Swagger
✅ Casbin
Страница входа
Страница авторизации
# Развертывание
docker run -d \
-p 8080:8080 -p 5000:5000 -p 9000:9000 \
--name naas \
-v <локальный путь>/naas/configs:/workspace/configs \
-v <локальный путь>/naas/web:/workspace/web \
--link mysql:mysql \
--link redis:redis \
-e HTTP_ENABLE=true \
-e GRPC_ENABLE=true \
-e GRPC_GATEWAY_ENABLE=true \
nilorg/naas:latest
apiVersion: v1
kind: Namespace
metadata:
name: nilorg
kubectl apply -f ./deployments/k8s/namespace.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: naas
namespace: nilorg
data:
config.yaml: |
<содержимое и configs/config.yaml одинаково>
rbac_model.conf: |
<содержимое и configs/rbac_model.conf одинаково>
kubectl apply -f ./deployments/k8s/config-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: naas
namespace: nilorg
spec:
selector:
matchLabels:
app: naas
service: naas
version: v1
replicas: bk
template:
metadata:
labels:
app: naas
service: naas
version: v1
spec:
restartPolicy: Always
containers:
- name: naas
image: nilorg/naas:latest
imagePullPolicy: Always
ports:
- containerPort: 8080 # соответствует HTTP_ENABLE
- containerPort: 5000 # соответствует GRPC_ENABLE
- containerPort: 9000 # соответствует GRPC_GATEWAY_ENABLE
env:
- name: GRPC_ENABLE
value: "true"
- name: GRPC_GATEWAY_ENABLE
value: "true"
- name: HTTP_ENABLE
value: "true"
- name: DAPR_ENABLE # используется только при использовании Dapr
value: "false"
volumeMounts:
- name: config-cm # конфигурационные файлы
mountPath: /workspace/configs/
volumes:
- name: config-cm # конфигурационные файлы
configMap:
name: naas
kubectl apply -f .
```/deployments/k8s/pod.yaml
kind: Service
apiVersion: v1
metadata:
name: naas
namespace: nilorg
labels:
app: naas
spec:
selector:
app: naas
service: naas
version: v1
ports: # настройте порты в соответствии с вашими требованиями
- name: naas-8080
port: 8080
protocol: TCP
targetPort: 8080
- name: naas-5000
port: 5000
protocol: TCP
targetPort: 5000
- name: naas-9000
port: 9000
protocol: TCP
targetPort: 9000
kubectl apply -f ./deployments/k8s/service.yaml
traefik
, но следует адаптировать под своё окружение)apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: naas
namespace: nilorg
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`naas.nilorg.com`)
services:
- name: naas
namespace: nilorg
port: 8080
kubectl apply -f ./deployments/k8s/traefik.yaml
configs/config.yaml
сервер:
имя: naas # имя сервера
oauth2:
порт: 8080 # порт HTTP сервера
издатель: "https://github.com/nilorg/naas"
устройство_авторизации_конечная_точка: true # включено ли устройство авторизации
внутренний_проверочный_конечная_точка: true # включена ли внутренняя проверочная точка
отзыв_токена_конечная_точка: true # включена ли конечная точка отзыва токена
grpc:
порт: 9000
шлюз:
порт: 5000
oidc:
включен: true # включен ли OpenID Connect
информация_о_пользователе_конечная_точка: true # включена ли конечная точка информации о пользователе
открытый_api:
включен: true # включен ли открытый API
``` администрирование:
включен: true # включен ли административный раздел
внешний: true # включен ли внешний доступ, требуется настройка внешнего URL
внешний_URL: http://naas-admin.nilorg.com
суперпользователь: "root"
oauth2: # конфигурация OAuth2Client для административного раздела
клиент_ID: 1000
```лог:
уровень: "отладка" # паника/критическая/ошибка/предупреждение/информационное/отладочное
отчет_вызова: true jwt:
секрет: "github.com/nilorg/naas"
timeout: 20 # Время истечения токена в минутах
max_refresh: 10 # Допустимое время повторной выдачи токена
rsa: # Для генерации JWT токена используйте скрипт `. /scripts/create.sh` для создания приватного ключа и сертификата
приватный_ключ: | # Приватный ключ
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA20St6pqB4LQvqT1Aq2jZPbrkpSiwFeQwiu6AA2eBz3oYveYA
SCDzl/jXfPsY36b8VahDWmhgB/ie5Ku+R6yXiZcY9SYDiu8sMONwdkhlIL4nP1oC
97CffWf4vkt4mH7i5/rJWCd/MMLzjSmrMPdUOh9Jd2awNjUZ9QiVTBogZeMo8b5i
nVBRfRcKAQDZYlo5/VkpaRBTqahh+RoIReX1MHy/LuPMJywPaqHpIh3dlwOvnY6Q
uFrPo3cF4B7mi/ofTeRX7xzm6z+uxVZGkUHAxgm4VMAYmiP0dLSzyagA5IHUaPHV
ex8luTSR6DcbINm0bw9skUzI8zYPIGzI/rchSQIDAQABAoIBAQDazaAXOfNcvbHJ
2jvMUKZn+TXssbt1PO5L1U+dFg7tcVN7PCcP0wIBpumx6AecNtAa0fvUHc+mZKx6
V/9bGpllTYg0KajjXWPlrTAueHOhxt73UuUfMfsVc0k+66T917Cp+RIui8taZ1AO
j4QrKsO79Dilk61HipnKcLQ66t9liv4Uf/oxOjfvjaw0+mRDgD2eulTNE+pSIw6L
uZXduUcpZkYenXCIS+YfRjKMJGHdCiy0bj8887vg0JiqF+mPxGo1UrOMrkWtC4am
Fht7IMUO5KnfBveL1rMB3ed8LRie9B5EOopRoBZ7PhZ31sqlimYargHGnZwYH8BH
HzazCGwBAoGBAO8N14JcbqEcs0VpGqyuuBffheu3+6waGt90MhYEMVJsL07qLkIw
8P4zvPDthXMncrLBC7VJzKkZ7hmww3/qZX5xYjeSVggxG149I1Kncqn9l9BW/Qes
IEmTUfDE8Js6mQfJVxf7qKDsN9E5N90Oj2j4XZK2ECfaLKbwWfDv3IBBAoGBAOrP
x/jm9s6Y6KBzxBkXK0jtx2PGM1KxwJFcH9TKgz1A5yue0I1gVdU5Yf3HQowkUGJK
lT2sUHh1JXUWd2gSrZ5ba6Fc7yITIRUYjAJaW4JKvGtk59QsdRUsHiKsMxmM1GJl
/uDuZem+EiSA4R9ZZZSHAIfQY2VJD3MLDWVMvt8JAoGAJDebo/NvC1e2zVhMI0dh
OrSxrHG2Xm+iDKKlB/LgqhUb4b/W/E4/5LNf97x0kGq0lOJsbK3epOv5x8ihBds0
P0DcWYEBKcKO2+s1U8tsstZpzrWvJh9s0NjR/EFKFqp9DtHxMP/n0rKdhdOIF6Z
WZTvUE/nCLKkOzKE3dzpMkECgYAYkkmwyCqHkAS31aVtorkK1qcIz9LLEoK+M0+5
ar+1BzepnuLgCHay62BPuCxEkgA/aOKZI5EAKfITgJhaMaotag+nQRxdCndpx7nO
/TmaNsvkyRhhYY2W+5jjs/Vc9Rm8ekPjsc7EWPl5DGuCZk507nOlwq7ECJMvTLbI
JPHMUQKBgF9O0xzJu7NwR1njqeU1MWdo8nzmb9F2itsYRXmOtC+rjTs3uqWBqlu3
TE+L0j3o3S6navSHhzzcZLwozW6otHfDcmfFBQG48zbH7YgBVuTnSQyegEpSUHRa
Pk78NMGbTCMJ65lA96vscXaSk0hF9Y83YY9Jjiju+uwWdnx74khb
-----END RSA PRIVATE KEY-----
сертификат: | # Подписанный сертификат
-----BEGIN CERTIFICATE-----
MIIDSjCCAjICCQDWXqh/wC9VZjANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJD
TjERMA8GA1UECAwIU2hhbmRvbmcxDjAMBgNVBAcMBUppbmFuMQ8wDQYDVQQKDAZk
ZXZvcHMxFDASBgNVBAsMC2Rldm9wcHMxFzAVBgNVBAoMDG5pbG9yZy5jb20xHzAd
Fw0yMDA1MTYxMjA5MjJaFw0yMTA1MTYxMjA5MjJaMGcxDDAKBgNVBAYTAkNOMRMw
DgYDVQQIDAmVc2hhbmRvbmcxDDAKBgNVBAoMAUppbmFuMRIwEAYDVQQDDAlkZXZv
cHMxFDASBgNVBCoMCWRldm9wcHMxDTALBgNVBAMMBG5pbG9yZy5jb20wCQYFKw4D
AWCWwQIBAAKCAQEAb08=
-----END CERTIFICATE----- -----END CERTIFICATE-----
VPICKIDAHtaXhandog1OMAGA1UEBVFZiaY4DEL2OMA0GA1UEChMEVHJhbnNwbGFuMRgwFgYDVQQDExBTZXJ2aWNlIFRydWUgQXV0aGlvbmVyc2VudGUwggEAMIIDBAIBADAhMAkGBSsOAwIaBQAEFAAOBAJCAKCAQBnAgEBAA==
-----Конец сертификата-----
session:
name: "naas-session" # имя cookie для сессии
secret: "github.com/nilorg/naas" # секрет для шифрования сессий
options: # опции конфигурации сессии
path: "/"
domain: "naas.nilorg.com"
max_age: 86400
secure: false # следует включить только при использовании HTTPS, иначе сессия будет недоступна при HTTP
http_only: true
redis: # конфигурация Redis для хранения сессий
address: "localhost:6379"
password: ""
mysql: # база данных MySQL
address: "root:test123@tcp(localhost:3306)/naas?charset=utf8&parseTime=True&loc=Local"
log: true # выводить логи
redis: # Redis
address: "localhost:6379"
password: ""
db: 0
swagger: # https://swagger.io
enabled: true # включение Swagger
oauth2: # конфигурация OAuth2 для Swagger
client_id: 1000
client_secret: 22222
realm:
app_name: naas-server
redirect_uri: http://naas.nilorg.com/swagger/oauth2-redirect.html # адрес обратного вызова авторизацииcasbin: # https://casbin.org
init:
enabled: false # инициализация информации Casbin для первого запуска проекта
config: configs/rbac_model.conf # конфигурационный файл Casbin
storage: # объектное хранилище, поддерживает два типа: default и oss, default использует указанный каталог, а oss использует облачное хранилище Alibaba Cloud OSS
type: default # default/oss
default:
base_path: ./web/storage
oss: # конфигурация облачного хранилища Alibaba Cloud OSS
endpoint: oss-cn-shanghai.aliyuncs.com
bucket: xxx
access:
key_id: aaaaa
key_secret: bbbbb
public_path: http://localhost:8080/storage # префикс пути к файлам для доступа к ним. При использовании метода oss можно использовать внешний адрес
max_memory: 20 # 20МБ
naas:
resource: # ресурсы для авторизации API сервера
id: 1
geetest: # https://www.geetest.com проверка безопасности Geetest
enabled: true
id: "c9c4facd1a6feeb80802222cbb74ca8e" # можно заменить своим значением
key: "f7475f921a41f7ba79ae15e41658627c" # можно заменить своим значением
configs/rbac_model.conf
просмотреть синтаксис модели Casbin
# Синтаксис модели Casbin https://casbin.org/docs/en/syntax-for-models
# sub, obj, act представляют собой классический тройной набор: субъект доступа (Subject), объект доступа (Object) и действие доступа (Action).
# sub: пользователь, который хочет получить доступ к ресурсу
# dom: домен/доменный арендатор https://casbin.org/docs/en/rbac-with-domains
# obj: ресурс, к которому требуется доступ
# act: действие пользователя над ресурсом
```# request_definition: запросное определение
[request_definition]
r = sub, dom, obj, act
```# policy_definition: определение политики
[policy_definition]
p = sub, dom, obj, act
# role_definition: определение роли
[role_definition]
g = _, _, _
# policy_effect: эффект политики
[policy_effect]
e = some(where (p.eft == allow))
# matchers: сопоставители
[matchers]
m = g(r.sub, p.sub, r.dom) == true \
&& MyDomKeyMatch2(r.obj, p.obj, r.dom, p.dom) == true \
&& MyRegexMatch(r.act, p.act, r.dom, p.dom) == true \
|| r.sub == "роль:naas_root" \
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )