«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему ASAP (Atlassian) Auth — быстрый и безопасный выбор для аутентификации REST API?

Почему ASAP (Atlassian) Auth — быстрый и безопасный выбор для аутентификации REST API?

Опубликовано 17 ноября 2024 г.
Просматривать:829

Why ASAP (Atlassian) Auth is the Fast & Safe Choice for REST API Authentication?

Для старшего разработчика, который активно работает с API, безопасность и эффективность всегда являются главными приоритетами. Когда дело доходит до защиты REST API, существует множество методов аутентификации, но не все они одинаковы.

Atlassian ASAP (Аутентификация для сервисов и проектов) Auth выделяется как надежный, масштабируемый и безопасный вариант, особенно при работе с микросервисами или API, требующими надежных механизмов аутентификации. Но прежде чем углубляться в то, почему ASAP — такой отличный выбор, давайте кратко рассмотрим, что такое REST API и почему они важны.

Что такое REST API? ?

REST API (передача репрезентативного состояния) — это набор правил, которые позволяют создавать легкие, удобные в обслуживании и масштабируемые веб-сервисы. Они следуют архитектуре клиент-сервер без сохранения состояния, в которой сервер обрабатывает запрос клиента и отправляет ответ, обычно в формате JSON или XML. REST API широко используются из-за их простоты, масштабируемости и возможности отделить пользовательский интерфейс от сервера, что делает их идеальными для создания веб-сервисов, к которым могут получить доступ различные клиенты, включая веб-браузеры, мобильные устройства и другие серверы.

Что такое ASAP-аутентификация? ?️

ASAP (Аутентификация для сервисов и проектов) — это механизм аутентификации на основе токенов, разработанный Atlassian. Он разработан специально для связи между службами, когда одной службе необходимо безопасно вызывать другую. Вместо того, чтобы полагаться на учетные данные пользователя или OAuth (который более ориентирован на пользователя), ASAP использует JWT (веб-токены JSON) для предоставления временного доступа к сервисам. Это особенно полезно в микросервисных архитектурах, где службам необходимо эффективно аутентифицировать и авторизовать запросы без накладных расходов на управление сеансами пользователей или учетными данными.

Ключевые особенности ASAP Auth:

  • На основе JWT: ASAP использует токены JWT, которые компактны, безопасны для URL-адресов и могут содержать утверждения, отражающие личность и разрешения запрашивающей стороны.
  • Без сохранения состояния: Серверу не нужно хранить какую-либо информацию о сеансе, поскольку вся необходимая информация закодирована в JWT.
  • Безопасность: Токены ASAP подписываются с использованием закрытого ключа, что гарантирует, что только авторизованные службы могут генерировать действительные токены.
  • *Масштабируемость: * Идеально подходит для микросервисных архитектур, где сервисы часто взаимодействуют друг с другом.

Как реализовать ASAP Auth в Python, Java и Go?

Теперь, когда мы понимаем основы ASAP Auth, давайте посмотрим, как его можно реализовать на различных языках программирования.

Реализация Python

import jwt
import requests
from datetime import datetime, timedelta
import os

# Define ASAP token creation function
def create_asap_token(issuer, audience, private_key):
    current_time = datetime.utcnow()
    payload = {
        'iss': issuer,
        'aud': audience,
        'iat': current_time,
        'exp': current_time   timedelta(minutes=5),
    }
    token = jwt.encode(payload, private_key, algorithm='RS256')
    return token

# Load private key from environment variable or file
private_key = os.getenv('PRIVATE_KEY')
if not private_key:
    with open('path_to_private_key.pem', 'r') as key_file:
        private_key = key_file.read()

issuer = 'your-service'
audience = 'target-service'

token = create_asap_token(issuer, audience, private_key)
if isinstance(token, bytes):
    token = token.decode('utf-8')

headers = {
    'Authorization': f'Bearer {token}'
}

try:
    response = requests.get('https://api.target-service.com/data', headers=headers)
    response.raise_for_status()  # Raises HTTPError for bad responses
    print(response.json())
except requests.exceptions.RequestException as e:
    print(f"Request failed: {e}")


Java-реализация

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.time.Instant;
import java.util.Date;

public class ASAPAuthExample {

    public static PrivateKey loadPrivateKey(String filename) throws Exception {
        String key = new String(Files.readAllBytes(Paths.get(filename)))
                        .replace("-----BEGIN PRIVATE KEY-----", "")
                        .replace("-----END PRIVATE KEY-----", "")
                        .replaceAll("\\s", "");

        byte[] keyBytes = java.util.Base64.getDecoder().decode(key);

        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
    }

    public static String createASAPToken(String issuer, String audience, PrivateKey privateKey) {
        Algorithm algorithm = Algorithm.RSA256(null, privateKey);
        Instant now = Instant.now();

        return JWT.create()
                .withIssuer(issuer)
                .withAudience(audience)
                .withIssuedAt(Date.from(now))
                .withExpiresAt(Date.from(now.plusSeconds(300))) // 5 minutes expiry
                .sign(algorithm);
    }

    public static void main(String[] args) {
        try {
            String issuer = "your-service";
            String audience = "target-service";
            PrivateKey privateKey = loadPrivateKey("path_to_private_key.pem");

            String token = createASAPToken(issuer, audience, privateKey);

            // Use the token to make a secure API request (using your preferred HTTP client)
            System.out.println("Generated Token: "   token);
        } catch (Exception e) {
            System.err.println("Error creating token: "   e.getMessage());
        }
    }
}

Перейти к реализации

package main

import (
    "fmt"
    "io/ioutil"
    "time"
    "github.com/golang-jwt/jwt"
)

func loadPrivateKey(path string) (*rsa.PrivateKey, error) {
    keyData, err := ioutil.ReadFile(path)
    if err != nil {
        return nil, err
    }

    return jwt.ParseRSAPrivateKeyFromPEM(keyData)
}

func createASAPToken(issuer, audience, privateKeyPath string) (string, error) {
    privateKey, err := loadPrivateKey(privateKeyPath)
    if err != nil {
        return "", err
    }

    token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{
        "iss": issuer,
        "aud": audience,
        "iat": time.Now().Unix(),
        "exp": time.Now().Add(5 * time.Minute).Unix(),
    })

    tokenString, err := token.SignedString(privateKey)
    if err != nil {
        return "", err
    }

    return tokenString, nil
}

func main() {
    issuer := "your-service"
    audience := "target-service"
    privateKeyPath := "path_to_private_key.pem"

    token, err := createASAPToken(issuer, audience, privateKeyPath)
    if err != nil {
        fmt.Println("Error creating token:", err)
        return
    }

    // Use the token to make a secure API request (using your preferred HTTP client)
    fmt.Println("Generated Token:", token)
}

Как проверить аутентификацию ASAP с помощью инструментов?

Для тестирования аутентификации ASAP требуются инструменты, которые могут отправлять HTTP-запросы с настраиваемыми заголовками. Вот как это можно сделать, используя EchoAPI и cURL.

Тестирование с помощью EchoAPI?

Why ASAP (Atlassian) Auth is the Fast & Safe Choice for REST API Authentication?
Выберите метод API и URL:
Выберите правильный метод HTTP (например, POST, GET) и введите URL-адрес конечной точки API.

Перейдите на вкладку «Аутентификация»:
Нажмите вкладку «Аутентификация» на панели запросов.

Выберите авторизацию ASAP (Atlassian):
В раскрывающемся списке «Тип» выберите «Как можно скорее (Atlassian)».

Настройте алгоритм и поля:

  • Алгоритм: Выберите алгоритм подписи (например, HS256).
  • Эмитент: Введите идентификатор, создающий токен.
  • Аудитория: Укажите предполагаемых получателей токена.
  • Идентификатор ключа: Введите идентификатор ключа подписи.
  • Закрытый ключ: Введите ключ подписи.

Сохранить и отправить:
Нажмите «Сохранить», затем «Отправить», чтобы выполнить запрос с аутентификацией ASAP

Why ASAP (Atlassian) Auth is the Fast & Safe Choice for REST API Authentication?

Тестирование с помощью cURL

curl -X GET "https://api.target-service.com/data" \
-H "Authorization: Bearer "

Эта команда отправляет токен ASAP как часть заголовка HTTP, и вы можете проверить ответ непосредственно в терминале.

Заключение ?

ASAP Auth обеспечивает надежный, масштабируемый и безопасный способ аутентификации при взаимодействии между службами, особенно в микросервисных архитектурах. Используя JWT, ASAP обеспечивает аутентификацию на основе токенов без сохранения состояния, что имеет решающее значение для поддержания высокого уровня безопасности и производительности. Независимо от того, работаете ли вы с Python, Java или Go, реализация ASAP Auth проста и хорошо интегрируется в существующие рабочие процессы.

Кроме того, тестирование этого метода аутентификации с использованием таких инструментов, как EchoAPI или cURL, гарантирует, что ваша реализация безопасна и работает правильно. Продолжая создавать и защищать свои REST API, рассмотрите возможность использования ASAP Auth для повышения безопасности и эффективности ваших сервисов.




Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/philip_zhang_854092d88473/why-asap-atlassian-auth-is-the-fast-safe-choice-for-rest-api-authentication-18gl?1 При наличии каких-либо нарушений , пожалуйста, свяжитесь с Study_golang @163.comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3