برنامه نویسی

محافظت از API های خود با KeyCloak

در ادامه پست ، من وقت خود را در مورد بازنمایی معماری برنامه با نمودارهای C4 ایجاد کردم ، در این پست وقتی در مورد توسعه استراحت API صحبت می کنیم ، این امنیت است. برای مثال ایمنی استراحت API ، من نمونه ای از اجرای یکی از مؤلفه های معماری را که در نمودار پست قبلی ارائه شده است ، ارائه می دهم. در این پست من اجرای میکروسرویس را ارائه می دهم ecommerce-ms-product با Java 17 ، JPA و Boot Spring پیاده سازی شده است. برای امنیت API من از KeyCloak به عنوان هویت و مدیریت دسترسی (AMI) استفاده کردم.

مدیریت هویت و دسترسی (AMI) چیست؟

مدیریت هویت و دسترسی نظارت بر تأیید اعتبار کاربر و در دسترس بودن منابع را ارائه می دهد. این فناوری که اغلب به عنوان AMA گفته می شود ، تضمین می کند که افراد مناسب در زمان مناسب و به دلایل مناسب به منابع دیجیتالی مناسب دسترسی پیدا کنند.

مفاهیم اساسی در مورد

یکی منبع دیجیتالی این به هر ترکیبی از برنامه ها و داده ها در یک سیستم رایانه ای اشاره دارد. مثالها شامل برنامه های وب ، API ها ، سیستم عامل ها ، دستگاه ها و بانکهای اطلاعاتی است.

در مرکز هوش مصنوعی هویتبشر شخصی می خواهد به درخواست شما ، چه مشتری ، کارمند ، عضو یا شرکت کننده ، دسترسی پیدا کند. در زمینه AMI ، یک حساب کاربری با a مطابقت دارد هویت دیجیتالیبشر علاوه بر نمایندگی افراد ، این حساب ها همچنین ممکن است با عناصر غیر انسانی مانند نرم افزار ، اینترنت اشیاء (IOT) یا روبات ها همراه باشد.

بوها احراز هویت این شامل تأیید هویت دیجیتال است ، و اطمینان می دهد که کسی (یا چیزی) ثابت می کند که کسی است که ادعا می کند.
من و اعتبار تعیین کنید که چه ویژگی هایی یک کاربر مجاز به دسترسی است.

استانداردهای احراز هویت و مجوز برای اطمینان از ایمنی و کارآیی سیستم های مدیریت هویت (AMI) ضروری است. شناخته شده ترین و به طور گسترده در صنعت شامل موارد زیر است:

OAUTH 2.0: پروتکل مجوز که امکان دسترسی ایمن به منابع را بدون قرار گرفتن در معرض اعتبار فراهم می کند.
OpenID Connect (OIDC): OAUTH 2.0 پسوند برای تأیید اعتبار ، به کاربران امکان شناسایی ایمن می شود.
SAML (زبان نشانه گذاری امنیت): پروتکل مبتنی بر XML که برای تأیید اعتبار و تبادل اطلاعات هویت بین سیستم های مختلف استفاده می شود.
fido2/webauthn: استاندارد رمز عبور بدون رمز عبور ، بر اساس کلیدهای رمزنگاری.
LDAP (پروتکل دسترسی به فهرست سبک وزن): پروتکل برای دسترسی و نگهداری دایرکتوری های اطلاعاتی در مورد کاربران و دستگاه ها استفاده می شود.

این الگوهای به طور گسترده ای برای مدیریت هویت ، محافظت از داده های شخصی و کنترل دسترسی به منابع ، ایمن ترین و مطمئن ترین در نظر گرفته می شوند.

اعتبار مشتری جریان دارد

در اجرای من از جریان اعتبار مشتری (تعریف شده در OAUTH 2.0 RFC 6749 ، بخش 4.4) استفاده کردم ، شامل یک برنامه کاربردی است که اعتبار برنامه خود ، مانند شناسه مشتری و راز مشتری را برای یک نشانه دسترسی می کند.

شرح تصویر

این جریان برای برنامه های کاربردی دستگاه به ماشین (M2M) مانند کلین ، Daemon یا Backend Services مناسب است ، زیرا سیستم باید به جای کاربر ، برنامه را تأیید و مجاز کند.

در عمل

در اجرای میکروسرویس تجارت اقتصادی من دو مجموعه منابع ایجاد کردم:

/produtos
/categorias

در آنها نقاط پایانی را برای ایجاد ، مشاوره حذف و به روزرسانی این ویژگی ها پیاده سازی کردم. برای محافظت از این نقاط پایانی ، به گونه ای که فقط توسط کسانی که اعتبار لازم را دارند ، به آنها دسترسی پیدا می کند ، من در Aquivo اضافه کردم application.properties از پروژه به ورودی زیر:

spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:7080/realms/security-ecommerce-api

این ورودی برنامه را برای استفاده از قلمرو پیکربندی می کند security-ecommerce-api که در Keycloak ایجاد شده است

من همچنین امکانات بهاری زیر را در پروژه اضافه کردم:

        
            org.springframework.security
            spring-security-config
        
        
            org.springframework.boot
            spring-boot-starter-oauth2-resource-server
        
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با وجود این وابستگی ها در پروژه ، نقاط پایانی پروژه در حال حاضر در دسترس نیست و فقط توسط کسانی که دارای اعتبار مناسب هستند ، قابل دسترسی است.

پیکربندی امنیتی-عضو-شرکت-API

در منطقه داخلی KeyCloak ، یک قلمرو جدید ایجاد کنید:

شرح تصویر

در قلمرو ایجاد شده ، به منوی مشتری بروید و یک مشتری جدید ایجاد کنید:

شرح تصویر

در مثال ما ، شناسه مشتری را ایجاد کردم ecommerce-client، راز مشتری توسط KeyCloak تولید می شود و در برگه اعتبار ارائه می شود:

شرح تصویر

آزمایش API ایمن

برای آزمایش این اجرای ، من از پسوند VScode ، REST Client برای انجام درخواست ها استفاده کردم:

شرح تصویر

پیکربندی برای کلید محلی Cloak

برای اجرای KeyCloak محلی ، از Docker و Composis برای صعود از خدمات MySQL برای پایگاه داده KeyClaak و Keyclaak استفاده کردم.

services:

  mysqlsrv:
    image: mysql:5.7
    environment:
        MYSQL_ROOT_PASSWORD: "MySql2019!"
        MYSQL_DATABASE: "ecommerce-produtos"
    ports:
      - "3306:3306"
    volumes:
      - /home/paulo/Desenvolvimento/docker/mysql:/var/lib/mysql
    networks:
      - ecommerce-network

  keycloak:
    image: quay.io/keycloak/keycloak:24.0
    container_name: keycloak-ecommerce
    environment:
      KC_HOSTNAME: localhost
      KC_HOSTNAME_PORT: 7080
      KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
      KC_HEALTH_ENABLED: "true"
      KC_LOG_LEVEL: info
      KC_DB: mysql
      KC_DB_USERNAME: root
      KC_DB_PASSWORD: MySql2019!
      KC_DB_URL_HOST: mysqlsrv
      KC_DB_URL_PORT: 3306
      KC_DB_SCHEMA: keycloak
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:7080/health/ready"]
      interval: 15s
      timeout: 2s
      retries: 15
    command: ["start-dev", "--http-port", "7080", "--https-port", "7443"]
    ports:
      - "7080:7080"
      - "7443:7443"
    networks:
      - ecommerce-network
    depends_on: 
      - mysqlsrv

networks: 
  ecommerce-network:
    driver: bridge  
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا