1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/nilorg-naas

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

naas

Сервер аутентификации и авторизации (сервер аутентификации и авторизации)

Возможности

✅ Реализовано  ♻️ В процессе реализации  ❗️ Ожидается реализация

  1. OAuth2

    • ✅ Авторизация с помощью кода (Authorization Code)
    • ✅ Упрощённая модель (Implicit Grant Type)
    • ✅ Парольная модель (Resource Owner Password Credentials Grant)
    • ✅ Клиентская модель (Client Credentials Grant)
    • ✅ Модель устройства (Device Code)
    • ✅ Конечная точка внутреннего контроля (Token Introspection)
    • ✅ Конечная точка отмены токена (Token Revocation)
  2. ✅ OpenIDConnect

    • ✅ jwks
    • ✅ openid
    • ✅ openid-configuration
    • ✅ Конечная точка UserInfo (Пользовательская информация)
  3. ♻️ Swagger

    • ✅ Интеграция с аутентификацией OAuth2
  4. Casbin

  5. ♻️ Интерфейс управления NAAS

    • ✅ Интеграция с аутентификацией OAuth2
    • ✅ Базовые данные
      • ✅ Организации
      • ✅ Роли
      • ✅ Пользователи
    • ✅ OAuth2
      • ✅ Клиенты
      • ✅ Области действия
    • ✅ Casbin
      • ✅ Политики доступа маршрутов
      • ✅ Политики доступа меню
      • ✅ Политики доступа действий
    • ✅ Ресурсы
      • ✅ Серверы ресурсов
      • ✅ Маршруты
      • ✅ Меню
      • ✅ Действия6. ♻️ Другое
      • ❗ Аутентификация через SMS-код
      • ❗ Аутентификация через код подтверждения электронной почты
      • ❗ Третьи стороны входа (WeChat, DingTalk)
      • ❗ Логирование пользователя
      • ❗ Страница регистрации
      • ✅ Верификация GeeTest

Примеры страниц (ниже приведены примеры использования в системе распределенного планировщика Nilorg)

  1. Страница входа

    вход

  2. Страница авторизации

    авторизация# Развертывание

Использование Docker

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

Использование Kubernetes

  1. Создание пространства имён
apiVersion: v1
kind: Namespace
metadata:
  name: nilorg
kubectl apply -f ./deployments/k8s/namespace.yaml
  1. Создание конфигурационных файлов
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
  1. Создание Pod
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
  1. Создание сервиса
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
  1. Создание Ingress (в данном случае используется 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Аутентификация авторизованного сервера (OAuth2 + Casbin + Swagger + Gin) с поддержкой входа через сканирование кода. Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/nilorg-naas.git
git@api.gitlife.ru:oschina-mirror/nilorg-naas.git
oschina-mirror
nilorg-naas
nilorg-naas
master