Sử dụng Xác thực dựa trên chứng chỉ với SDK Microsoft Graph PowerShell
Rời xa các phiên tương tác
Trong các bài viết như cập nhật giấy phép cho tài khoản Azure AD sử dụng SDK Microsoft Graph PowerShell để truy cập dữ liệu Microsoft 365, chúng tôi đã sử dụng lệnh được đưa ra trong các phiên tương tác. Như tôi đã chỉ ra trong bài viết này, phương pháp này rất phù hợp để khám phá cách hoạt động của lệnh ghép ngắn Graph SDK, đồng thời có một số điểm quan trọng để lập trình viên và quản trị viên hiểu rõ. Vấn đề nghiêm trọng nhất là việc tích lũy quyền, trong đó sự đồng ý được thu thập theo thời gian có nghĩa là dịch vụ chính được sử dụng cho SDK có thể bị cấp phép quá mức. Giải pháp là sử dụng các ứng dụng riêng biệt đã đăng ký trong Azure AD với sự đồng ý để có đủ quyền để hoàn thành công việc; điều này tạo ra thách thức về quản lý nhưng lại an toàn hơn nhiều.
Nếu bạn tiếp tục sử dụng các ứng dụng đã đăng ký, bạn có thể sử dụng xác thực chỉ dành cho ứng dụng thay vì quyền truy cập được ủy quyền. Xác thực chỉ ứng dụng có nghĩa là ứng dụng sử dụng chứng chỉ X.509 làm thông tin xác thực. Chứng chỉ có thể được tự ký (cho mục đích thử nghiệm) hoặc do cơ quan cấp chứng chỉ cấp. Tài liệu của Microsoft về cách sử dụng xác thực chỉ ứng dụng cho Microsoft Graph PowerShell SDK chứa các bước định cấu hình ứng dụng đã đăng ký trong Azure AD để xác thực chỉ ứng dụng. Bài viết này trình bày kinh nghiệm của tôi khi sử dụng các bước.
Nhận chứng chỉ
Có thể bạn không có chứng chỉ X.509 đang chờ sử dụng nhưng chúng rất dễ tạo bằng PowerShell. Ví dụ mã này chạy lệnh ghép ngắn New-SelfSignedCertificate để tạo chứng chỉ mới được lưu trữ trong kho chứng chỉ cục bộ của người dùng hiện tại trên máy trạm nơi lệnh chạy:
$Cert = New-SelfSignedCertificate -DnsName office365itpros.onmicrosoft,com -CertStoreLocation "Cert:\CurrentUser\My" -FriendlyName "MicrosoftGraphSDK" -Subject "Test Cert for Microsoft Graph SDK"
Get-ChildItem "Cert:\CurrentUser\My\$($Cert.thumbprint)"
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
FC92991B21219F178AFB37C12DF231B6AFC3D790 CN=office365itpros.onmicrosoft
Nếu bạn muốn tạo chứng chỉ trong kho chứng chỉ cho máy cục bộ, hãy chỉ định Cert:\LocalMachine\My làm vị trí lưu trữ. Bạn chỉ có thể tạo chứng chỉ mới trong kho lưu trữ máy cục bộ nếu bạn chạy PowerShell với tư cách quản trị viên. Vì mục đích thử nghiệm, bạn có thể lưu trữ các chứng chỉ bạn sử dụng trong cửa hàng của mình. Khi đến lúc đưa thứ gì đó vào sản xuất, bạn sẽ cần cài đặt các chứng chỉ khác nhau trên các máy nơi mã sẽ chạy.
Sau khi tạo chứng chỉ, chúng tôi xuất nó sang tệp .cer. Đây là những gì tôi đã làm:
Get-ChildItem "Cert:\CurrentUser\My\$($Cert.thumbprint)" | Export-Certificate -FilePath C:\temp\MicrosoftGraphSDK.cer
Directory: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 06/10/2021 17:01 861 MicrosoftGraphSDK.cer
Kết nối chứng chỉ với ứng dụng
Các ứng dụng đã đăng ký Azure AD đóng vai trò là nơi chứa để giữ sự đồng ý cho một bộ quyền Đồ thị. Các quyền cho phép ứng dụng truy cập dữ liệu bằng truy vấn Đồ thị. Khi tập lệnh kết nối bằng xác thực chỉ ứng dụng, tập lệnh sẽ xác thực bằng cách chuyển dấu vân tay của chứng chỉ mà ứng dụng biết thay vì cơ chế khác như mật khẩu tương tác hoặc bí mật ứng dụng.
Để thực hiện được điều này, chúng ta phải tải tệp chứng chỉ được tạo bằng lệnh ghép ngắn Export-Certificate vào ứng dụng. Điều này được thực hiện bằng cách đi tới phần chứng chỉ và bí mật của thuộc tính ứng dụng và chọn tùy chọn tải lên chứng chỉ (Hình 1).
Hãy nhớ rằng ứng dụng có các quyền mà chúng tôi muốn sử dụng với truy vấn Đồ thị, chúng tôi cần thêm các quyền Đồ thị cần thiết cho ứng dụng. Các quyền chính xác khác nhau tùy theo dữ liệu mà ứng dụng muốn truy cập. Bạn có thể thử nghiệm bằng cách chạy mã trong phiên tương tác để tìm ra nhóm quyền phù hợp rồi thêm chúng vào ứng dụng. Trong Hình 2, tôi đã thêm năm quyền ứng dụng từ Auditlog.Read.All (cần để đọc dữ liệu đăng nhập của người dùng) đến User.Read.All (cần để đọc thông tin về tài khoản người dùng).
Lưu ý rằng quyền User.Read được ủy quyền sẽ bị xóa. Đây là quyền mặc định mà chúng tôi không cần.
Kết nối với Microsoft Graph
Chúng tôi cần ba thông tin để kết nối với Biểu đồ bằng lệnh ghép ngắn Connect-MgGraph:
- Mã định danh người thuê nhà. Bạn có thể sao chép điều này từ thuộc tính ứng dụng.
- Mã định danh ứng dụng. Một lần nữa, điều này có sẵn trong thuộc tính ứng dụng.
- Dấu vân tay của chứng chỉ. Điều này có sẵn như một thuộc tính của chứng chỉ (xem ví dụ ở trên).
Với thông tin này, chúng tôi có thể chạy lệnh như (hãy nhớ thay thế giá trị mã định danh đối tượng thuê, mã định danh ứng dụng và giá trị vân tay chứng chỉ phù hợp với đối tượng thuê của bạn):
Connect-MgGraph -TenantId "a562313f-14fc-43a2-9a7a-d2e27f4f3478" -AppId "d86b1929-b818-411b-834a-206385bf5347" -CertificateThumbprint "FC92991B21219F178AFB37C12DF231B6AFC3D790"
Welcome To Microsoft Graph!
Để kiểm tra xem bạn đã kết nối với đúng cài đặt hay chưa, hãy chạy lệnh ghép ngắn Get-MgContext. Những điều quan trọng cần kiểm tra ở đây là cài đặt đầu vào cho mã định danh khách hàng, mã định danh đối tượng thuê và dấu vân tay cùng với các quyền (phạm vi) có sẵn. Phạm vi ngữ cảnh sẽ báo cáo Process thay vì CurrentUser (thông tin đăng nhập tương tác) và không được hiển thị tên tài khoản.
Get-MgContext
ClientId : d86b1929-b818-411b-834a-206385bf5347
TenantId : a562313f-14fc-43a2-9a7a-d2e27f4f3478
CertificateThumbprint : FC92991B21219F178AFB37C12DF231B6AFC3D790
Scopes : {Group.Read.All, MailboxSettings.Read, User.Read.All, Organization.ReadWrite.All...}
AuthType : AppOnly
AuthProviderType : ClientCredentialProvider
CertificateName :
Account :
AppName : Microsoft Graph PowerShell SDK Cert
ContextScope : Process
Certificate :
Nếu có điều gì đó không ổn, hãy chạy lệnh ghép ngắn Disconnect-MgGraph để kết thúc phiên, quay lại và kiểm tra cài đặt ứng dụng (đặc biệt, đảm bảo rằng bạn đã đồng ý với tất cả các quyền cần thiết), và thử lại.
Mã chạy
Sau khi kết nối thành công với các quyền phù hợp, bạn có thể chạy mã của mình. Như thường lệ, lời nhắc tương tác sẽ không hoạt động, do đó, có thể cần phải thực hiện một số điều chỉnh để lấy mã được tạo cho phiên tương tác và làm cho mã đó hoạt động ở tác vụ nền. Sau đó, vấn đề là tìm ra các chi tiết hoạt động như:
- Chứng chỉ X.509 dùng để xác thực và cách cài đặt chúng đúng nơi
- Cách gửi kịch bản làm nền cho công việc.
- Xử lý kết quả đầu ra (ví dụ: gửi email một tệp có kết quả của tập lệnh).
Tất cả đều là công việc của một ngày khác.

