首頁 > Java > java教程 > 主體

為什麼 ASAP (Atlassian) Auth 是 REST API 驗證的快速且安全的選擇?

Linda Hamilton
發布: 2024-11-16 13:17:02
原創
629 人瀏覽過

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 是一組規則,允許建立輕量級、可維護且可擴充的 Web 服務。它們遵循無狀態的客戶端-伺服器架構,其中伺服器處理客戶端的請求並發迴回應,通常採用 JSON 或 XML 格式。 REST API 因其簡單性、可擴展性以及將用戶介面與伺服器分離的能力而被廣泛使用,這使得它們非常適合構建可由各種客戶端訪問的Web 服務,包括Web 瀏覽器、行動裝置設備和其他伺服器。

什麼是 ASAP Auth? ? ️

ASAP(服務和專案驗證)是 Atlassian 開發的基於令牌的身份驗證機制。它專為服務到服務通訊而設計,其中一個服務需要安全地呼叫另一個服務。 ASAP 不依賴使用者憑證或 OAuth(更以使用者為中心),而是使用 JWT(JSON Web 令牌)授予對服務的臨時存取權限。這在微服務架構中特別有用,其中服務需要有效地對請求進行身份驗證和授權,而無需管理使用者會話或憑證的開銷。

ASAP Auth 的主要特點:

  • 基於 JWT: ASAP 依賴 JWT 令牌,它是緊湊的、URL 安全的,並且可以攜帶代表請求者身分和權限的聲明。
  • 無狀態: 伺服器不需要儲存任何會話訊息,因為所有必要的資訊都編碼在 JWT 中。
  • 安全性: ASAP 令牌使用私鑰進行簽名,確保只有授權服務才能產生有效令牌。
  • *可擴充:*非常適合服務之間頻繁通訊的微服務架構。

如何在 Python、Java 和 Go 中實作 ASAP Auth?

現在我們了解了 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 Auth?

測試 ASAP 驗證需要可以傳送帶有自訂標頭的 HTTP 請求的工具。以下是使用 EchoAPI 和 cURL 的方法。

使用 EchoAPI 進行測試?

Why ASAP (Atlassian) Auth is the Fast & Safe Choice for REST API Authentication?
選擇API方法與網址:
選擇正確的 HTTP 方法(例如 POST、GET)並輸入 API 端點 URL。

導覽至「驗證」標籤:
按一下請求面板中的“身份驗證”標籤。

選擇盡快(Atlassian)驗證:
從類型下拉清單中,選擇 ASAP (Atlassian)。

配置演算法與欄位:

  • 演算法: 選擇簽章演算法(例如 HS256)。
  • 發行者:輸入產生令牌的身分。
  • 受眾:提供代幣的預期接收者。
  • 金鑰 ID: 輸入簽章金鑰的識別碼。
  • 私鑰:輸入簽章金鑰。

儲存並發送:
按一下“儲存”,然後按一下“傳送”以使用 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 <your-asap-token>"
登入後複製

此命令發送 ASAP 令牌作為 HTTP 標頭的一部分,您可以直接在終端機中檢查回應。

結論 ?

ASAP Auth 提供了一種強大、可擴展且安全的方式來處理服務間通訊中的身份驗證,尤其是在微服務架構中。透過利用 JWT,ASAP 可以實現無狀態、基於令牌的身份驗證,這對於維持高安全性和效能至關重要。無論您使用 Python、Java 還是 Go,實施 ASAP Auth 都很簡單,並且可以很好地整合到現有工作流程中。

此外,使用 EchoAPI 或 cURL 等工具測試此驗證方法可確保您的實作安全且正常運作。當您繼續建置和保護 REST API 時,請考慮使用 ASAP Auth 來增強整個服務的安全性和效率。




以上是為什麼 ASAP (Atlassian) Auth 是 REST API 驗證的快速且安全的選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板