cuốn sách gpt4 ai đã làm

Cách tạo blob Azure bằng xác thực dựa trên chứng chỉ và tải xuống tệp từ nó bằng java

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 09:32:26 30 4
mua khóa gpt4 Nike

Tôi đã viết một chương trình java kết nối với bộ lưu trữ Azure blob mà tôi đã tạo và tải xuống nội dung tệp bằng chương trình bên dưới, nhưng kịch bản sản phẩm thực của tôi thì khác, khách hàng chia sẻ ThumbPrint, ClientId, AzureKeyVaultUrl, SecretId cũng như containerName và Chứng chỉ. Chương trình của tôi hoạt động tốt trên tài khoản tôi đã tạo trong thời gian dùng thử. Nhưng không hiểu cách tạo tài khoản có xác thực dựa trên chứng chỉ và sử dụng tài khoản đó trong khi kết nối bằng chương trình java. gói com;

nhập com.microsoft.azure.storage.CloudStorageAccount;
nhập com.microsoft.azure.storage.OperationContext;
nhập com.microsoft.azure.storage.StorageException;
nhập com.microsoft.azure.storage.blob.*;

import java.io.BufferedWriter;
nhập java.io.File;
nhập java.io.FileWriter;
nhập java.io.Writer;
nhập java.util.Scanner;

lớp công khai ConnectToAzureToExistingContainer {
chuỗi tĩnh cuối cùng công khai storageConnectionString =
"DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy;EndpointSuffix=zzzz";


public static void main( String[] args )
{
CloudStorageTài khoản lưu trữTài khoản;
CloudBlobClient blobClient = null;
Vùng chứa CloudBlobContainer=null;
thử {
storageAccount = CloudStorageAccount.parse(storageConnectionString);
blobClient = storageAccount.createCloudBlobClient();
container = blobClient.getContainerReference("revenuestream");
CloudBlockBlob blob = container.getBlockBlobReference("revenuestreams.csv");
System.out.println(blob.downloadText());
System.out.println("Xong...");
}
bắt (StorageException cũ) {
System.out.println(String.format("Lỗi được trả về từ dịch vụ. Mã http: %d và mã lỗi: %s", ex.getHttpStatusCode(), ex.getErrorCode()));
}
bắt (Ngoại lệ cũ) {
System.out.println(ex.getMessage());
}
}
}

câu trả lời hay nhất

Như @Thomas đã nói, bạn có thể sử dụng Azure AD để nhận mã thông báo truy cập nhằm truy cập các tệp lưu trữ của mình. Có thể trích dẫn các cơ chế chínhthis doc . Bạn cần có mã thông báo truy cập để gọi API lưu trữTruy cập dịch vụ lưu trữ của bạn. Và bạn muốn sử dụng chứng chỉ để lấy access token này để truy cập vào dịch vụ lưu trữ. Bạn có thể làm theo các bước dưới đây.

  1. Chuẩn bị chứng chỉ .cer và chứng chỉ .pfx rồi tải .cer lên ứng dụng Azure AD: nhập mô tả hình ảnh ở đây

  2. Chạy ps này để lấy giá trị x5t của tệp .pfx, chúng tôi cần nó khi ký mã thông báo jwt:

$cer = Hệ thống đối tượng mới.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import("đường dẫn tệp .pfx của bạn","mật khẩu tệp .pfx của bạn",'Có thể xuất được')
$x5t = [System.Convert]::ToBase64String($cer.GetCertHash())
$x5t

  • Chuyển đổi tệp .pfx thành tệp .der để chúng ta có thể sử dụng dễ dàng trong Java:

    1) Chuyển đổi tệp Pem từ pfx:

    openssl pkcs12 -in "Đường dẫn đến tệp .pfx của bạn" -out "Đường dẫn đến tệp .pem mới" -clcerts

    2) Chuyển Pem sang der để java có thể đọc dễ dàng:

    openssl pkcs8 -topk8 -inform PEM -outform DER -in "đường dẫn tệp pem"-out "đường dẫn tệp der mới"-nocrypt

  • Vui lòng làm theo mã bên dưới để nhận mã thông báo truy cập từ Azure AD:

  • nhập java.nio.file.Files;
    nhập java.nio.file.Paths;
    nhập java.security.KeyFactory;
    import java.security.PrivateKey;
    nhập java.security.spec.PKCS8EncodedKeySpec;
    nhập java.util.Date;
    nhập java.util.UUID;
    nhập java.util.concurrent.ExecutorService;
    nhập java.util.concurrent.Executors;
    nhập java.util.concurrent.Future;
    nhập javax.naming.ServiceUnavailableException;
    nhập com.microsoft.aad.adal4j.AuthenticationContext;
    nhập com.microsoft.aad.adal4j.AuthenticationResult;
    nhập com.microsoft.aad.adal4j.ClientAssertion;

    nhập io.jsonwebtoken.Jwts;
    nhập io.jsonwebtoken.SignatureAlgorithm;

    lớp công khai PublicClient {

    chuỗi tĩnh cuối cùng riêng tư TENANT_ID = "id tanant của bạn";
    Chuỗi tĩnh cuối cùng riêng tư AUTHORITY = "https://login.microsoftonline.com/" + TENANT_ID;
    chuỗi tĩnh cuối cùng riêng tư CLIENT_ID = "ID ứng dụng Azure AD của bạn";
    chuỗi tĩnh cuối cùng riêng tư X5TVALUE_STRING = "giá trị x5t chúng tôi nhận được từ bước 2 ";
    chuỗi tĩnh cuối cùng riêng tư DERFILE_PATH_STRING = "đường dẫn tệp der";

    public static void main(String args[]) ném ngoại lệ {
    // Yêu cầu mã thông báo truy cập từ AAD
    Kết quả xác thựcResult = getAccessToken();

    System.out.print(result.getAccessToken());

    }

    public static PrivateKey getPrivateKey() ném ngoại lệ {
    byte[] keyBytes = Files.readAllBytes(Paths.get(DERFILE_PATH_STRING));
    Thông số PKCS8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    trả về kf.generatePrivate(spec);
    }

    xác thực tĩnh riêng tưResult getAccessToken() ném ngoại lệ {
    Bối cảnh xác thực;
    Kết quả xác thực;
    Dịch vụ ExecutorService = null;
    thử {
    dịch vụ = Executors.newFixedThreadPool(1);
    bối cảnh = Xác thực mớiContext(AUTHORITY, false, service);

    Khóa PrivateKey = getPrivateKey();
    Chuỗi jwt = Jwts.builder().setHeaderParam("typ", "JWT").setHeaderParam("alg", "RS256")
    .setHeaderParam("x5t",X5TVALUE_STRING).setSubject(CLIENT_ID)
    .setExpiration(ngày mới(System.currentTimeMillis() + 200000)).setIssuer(CLIENT_ID)
    .setNotBefore(ngày mới())
    .setAudience("https://login.microsoftonline.com/" + TENANT_ID + "/oauth2/token")
    .setId(UUID.randomUUID().toString()).signWith(SignatureAlgorithm.RS256, key).compact();

    ClientAssertion clientAssertion = new ClientAssertion(jwt);

    Tương lai tương lai = bối cảnh.acquireToken("https://storage.azure.com/", clientAssertion,
    vô giá trị);

    kết quả = tương lai.get();
    } finally {
    service.shutdown();
    }

    nếu (kết quả == null) {
    ném ServiceUnavailableException mới ("kết quả xác thực là null");
    }
    return result;
    }

    }

    Bằng cách sử dụng mã thông báo này, chúng tôi có thể gọi API REST lưu trữ, xin lưu ý rằng nếu bạn sử dụng xác thực Azure AD để truy cập vào bộ lưu trữ thì "x-ms-version: 2017-11-09" là bắt buộc trong tiêu đề yêu cầu: nhập mô tả hình ảnh ở đây

    Về java - Cách tạo blob Azure bằng cách sử dụng xác thực dựa trên chứng chỉ và tải xuống các tệp từ nó bằng java, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/56924802/

    30 4 0
    không gian vũ trụ
    Hồ sơ

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá taxi Didi miễn phí
    Phiếu giảm giá taxi Didi
    Chứng chỉ ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
    Xem sitemap của VNExpress