”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 ASAP (Atlassian) Auth 是 REST API 身份验证的快速且安全的选择?

为什么 ASAP (Atlassian) Auth 是 REST API 身份验证的快速且安全的选择?

发布于2024-11-17
浏览:811

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方法和URL:
选择正确的 HTTP 方法(例如 POST、GET)并输入 API 端点 URL。

导航到“身份验证”选项卡:
单击请求面板中的“身份验证”选项卡。

尽快选择 (Atlassian) Auth:
从类型下拉列表中,选择 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 "

此命令将 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如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-18
  • 如何在 Chrome 实验功能中使用 JavaScript 从浏览器连接到 TCP 套接字?
    如何在 Chrome 实验功能中使用 JavaScript 从浏览器连接到 TCP 套接字?
    使用 JavaScript 从浏览器连接到 TCP 套接字当您寻求在浏览器的 JavaScript 和 .NET 应用程序托管的 TCP 套接字之间建立双向通信时,当前的 Web 技术格局提出了挑战。到目前为止,流行的浏览器缺乏 JavaScript 的标准化套接字 API。然而,有希望的进展正在发...
    编程 发布于2024-11-18
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-18
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-18
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-18
  • 如果 Go 函数发生紧急情况,如何返回错误?
    如果 Go 函数发生紧急情况,如何返回错误?
    从 Go 中的 Defer 返回您遇到了这样的问题:如果 Go 中的函数发生紧急情况,您希望返回错误。这是对您的代码的分析和修复:func getReport(filename string) (rep report, err error) { rep.data = make(map[str...
    编程 发布于2024-11-18
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-17
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-17
  • 如何有效调试 Python 代码:实用技巧和工具
    如何有效调试 Python 代码:实用技巧和工具
    Python 调试:实用技巧和工具在对 Python 代码进行故障排除时,拥有一个可供使用的调试技术工具包至关重要。以下是一些非常有效的技巧:PDB:强大的断点工具利用 PDB 模块设置断点并获得对代码执行的控制。通过插入 pdb.set_trace(),可以在特定点暂停执行并检查程序的当前状态:i...
    编程 发布于2024-11-17
  • 如何在不重启服务器的情况下清除MySQL查询缓存?
    如何在不重启服务器的情况下清除MySQL查询缓存?
    在不恢复服务器的情况下减轻 MySQL 查询缓存尽管 MySQL 查询缓存提供了更高的性能,但在需要时可能会出现这种情况可以在不中断服务器运行的情况下进行清除。以下是实现此目的的一些方法:重置查询缓存如果执行命令的用户具有重新加载权限,则可以使用以下命令显式删除查询缓存命令:RESET QUERY ...
    编程 发布于2024-11-17
  • MySQL 如何处理表名和列名的区分大小写?
    MySQL 如何处理表名和列名的区分大小写?
    MySQL 中列名和表名的大小写敏感度MySQL 中的大小写敏感度主题可能会让许多用户感到困惑。了解列名和表名的大小写敏感性对于确保正确的数据库操作和避免潜在的陷阱至关重要。表名表名是否区分大小写取决于在运行 MySQL 服务器的操作系统上。在基于 Unix 的系统(例如 Linux)上,表名称区分...
    编程 发布于2024-11-17
  • 为什么将常量引用绑定到临时对象会延长其生命周期?
    为什么将常量引用绑定到临时对象会延长其生命周期?
    为什么将常量引用绑定到临时对象会延长临时对象的生命周期?C 编程语言允许常量引用来延长临时对象的生命周期。这种行为一直是很多争论的主题,一些人认为它可以提高代码设计的性能和灵活性。这种语言功能的起源可以追溯到 1993 年,当时它被提议作为以下问题的解决方案:绑定到引用时临时变量的处理不一致。在没有...
    编程 发布于2024-11-17
  • 如何在共享主机的子目录中托管 Laravel 项目而不在 URL 中暴露“/public”
    如何在共享主机的子目录中托管 Laravel 项目而不在 URL 中暴露“/public”
    在共享主机上托管 Laravel 项目时,一个常见的挑战是确保 URL 不需要 /public 目录。这是在子目录中托管 Laravel 应用程序同时保持 URL 干净的分步指南。 第 1 步:将 Laravel 项目上传到服务器 登录您的托管帐户并访问您的文件管理器。 导航到 pu...
    编程 发布于2024-11-17
  • 编码面试中解决问题的终极指南
    编码面试中解决问题的终极指南
    Common Strategies for Coding Interview Questions Two Pointers The two pointers technique is often used to solve array-related problem...
    编程 发布于2024-11-17
  • 为什么 ASAP (Atlassian) Auth 是 REST API 身份验证的快速且安全的选择?
    为什么 ASAP (Atlassian) Auth 是 REST API 身份验证的快速且安全的选择?
    作为一名广泛使用 API 的高级开发人员,安全性和效率始终是重中之重。在保护 REST API 方面,有多种身份验证方法可用,但并非所有方法都是相同的。 Atlassian 的 ASAP(服务和项目身份验证)Auth 作为一个强大、可扩展且安全的选项而脱颖而出,特别是在处理需要强大身份验证机制的...
    编程 发布于2024-11-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3