باعتبارك مطورًا كبيرًا يعمل على نطاق واسع مع واجهات برمجة التطبيقات، فإن الأمان والكفاءة دائمًا ما يكونان على رأس الأولويات. عندما يتعلق الأمر بتأمين واجهات برمجة تطبيقات REST، هناك العديد من طرق المصادقة المتاحة، ولكن لم يتم إنشاؤها جميعها على قدم المساواة.
تبرز مصادقة ASAP (مصادقة الخدمات والمشاريع) من Atlassian كخيار قوي وقابل للتطوير وآمن، لا سيما عند التعامل مع الخدمات الصغيرة أو واجهات برمجة التطبيقات التي تتطلب آليات مصادقة قوية. ولكن قبل التعمق في سبب اعتبار ASAP خيارًا رائعًا، دعنا نلقي نظرة سريعة على ماهية REST APIs وسبب أهميتها.
REST (نقل الحالة التمثيلية) هي مجموعة من القواعد التي تسمح بإنشاء خدمات ويب خفيفة الوزن وقابلة للصيانة وقابلة للتطوير. وهي تتبع بنية خادم العميل عديمة الحالة، حيث يقوم الخادم بمعالجة طلب العميل ويرسل استجابة، عادةً بتنسيق JSON أو XML. تُستخدم REST APIs على نطاق واسع بسبب بساطتها وقابليتها للتوسع وقدرتها على فصل واجهة المستخدم عن الخادم، مما يجعلها مثالية لبناء خدمات الويب التي يمكن الوصول إليها من قبل عملاء مختلفين، بما في ذلك متصفحات الويب والهواتف المحمولة الأجهزة والخوادم الأخرى.
ASAP (مصادقة الخدمات والمشاريع) هي آلية مصادقة قائمة على الرمز المميز تم تطويرها بواسطة Atlassian. لقد تم تصميمه خصيصًا للاتصال من خدمة إلى خدمة، حيث تحتاج إحدى الخدمات إلى الاتصال بأخرى بشكل آمن. بدلاً من الاعتماد على بيانات اعتماد المستخدم أو OAuth (الذي يركز بشكل أكبر على المستخدم)، يستخدم ASAP JWT (JSON Web Tokens) لمنح الوصول المؤقت إلى الخدمات. يعد هذا مفيدًا بشكل خاص في بنيات الخدمات الصغيرة، حيث تحتاج الخدمات إلى مصادقة الطلبات والترخيص لها بكفاءة دون تحمل تكاليف إدارة جلسات المستخدم أو بيانات الاعتماد.
الآن بعد أن فهمنا أساسيات ASAP Auth، دعونا نلقي نظرة على كيفية تنفيذها بلغات البرمجة المختلفة.
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}")
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) }
يتطلب اختبار المصادقة في أسرع وقت ممكن أدوات يمكنها إرسال طلبات HTTP برؤوس مخصصة. وإليك كيفية القيام بذلك باستخدام EchoAPI وcURL.
حدد طريقة واجهة برمجة التطبيقات وعنوان URL:
اختر طريقة HTTP الصحيحة (على سبيل المثال، POST، GET) وأدخل عنوان URL لنقطة نهاية API.
انتقل إلى علامة التبويب "المصادقة":
انقر فوق علامة التبويب "مصادقة" في لوحة الطلب.
اختر ASAP (الأطلسي) المصادقة:
من القائمة المنسدلة النوع، حدد ASAP (Atlassian).
تكوين الخوارزمية والحقول:
حفظ وإرسال:
انقر فوق حفظ، ثم إرسال لتنفيذ الطلب باستخدام مصادقة ASAP
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 وتأمينها، فكر في استخدام ASAP Auth لتعزيز الأمان والكفاءة عبر خدماتك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3