मेरे पास एक सेवा प्रिंसिपल है जिसे मैंने नीचे पावरहेल का उपयोग करके बनाया है।

$sp3 = New-AzureRmADServicePrincipal `
    -DisplayName "<service-principal-name>" `
    -CertValue $certValue3 `
    -EndDate ([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($cert3.Certificate.GetExpirationDateString(), [System.TimeZoneInfo]::Local.Id, 'GMT Standard Time'))

जहां certValue3 बेस64स्ट्रिंग RawCertData है। यह सेवा प्रिंसिपल ठीक काम करता है और मैं प्रमाण पत्र का उपयोग करते समय टोकन प्राप्त करने में सक्षम हूं।

एक बार Azure AD में सर्विस प्रिंसिपल बन जाने के बाद, मैं Powershell का उपयोग करके सर्विस प्रिंसिपल से जुड़े सर्टिफिकेट का थंबप्रिंट कैसे देख सकता हूँ?

मैंने इस को आजमाया है, लेकिन जब मैं Get-AzureADapplicationKeyCredential निष्पादित करने का प्रयास करता हूं तो मुझे Forbidden मिलता है

मैंने Azure सक्रिय निर्देशिका → ऐप पंजीकरण → <सेवा-प्रिंसिपल-नाम> → मेनिफेस्ट के तहत बनाए गए सेवा प्रिंसिपल के तहत Azure पोर्टल में मेनिफेस्ट की भी जांच की, लेकिन keyCredentials नोड खाली है

"keyCredentials": [],

कृपया ध्यान दें कि जब मैं New-AzureRmADApplication के बाद क्रेडेंशियल New-AzureRmADAppCredential और फिर New-AzureRmADServicePrincipal का उपयोग करके एक एप्लिकेशन बनाता हूं, तो मुझे keyCredentials के साथ customKeyIdentifier प्रमाणपत्र थंबप्रिंट पर सेट दिखाई देता है . नमूना स्क्रिप्ट नीचे -

$adapp = New-AzureRmADApplication -DisplayName "<application-name>" `
    -HomePage "<home-page-url>" `
    -IdentifierUris "<identifier-url>" `
    -CertValue $certValue `
    -StartDate ([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($cert.Certificate.GetEffectiveDateString(), [System.TimeZoneInfo]::Local.Id, 'GMT Standard Time')) `
    -EndDate ([System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($cert.Certificate.GetExpirationDateString(), [System.TimeZoneInfo]::Local.Id, 'GMT Standard Time'))

New-AzureRmADAppCredential -ApplicationId $adapp.ApplicationId -CertValue $certValue2 

$sp2 = New-AzureRmADServicePrincipal -ApplicationId $adapp.ApplicationId -DisplayName "<application-name>"

जब AzureRmADApplication और AzureRmADAppCredential के बिना सर्विस प्रिंसिपल स्वतंत्र रूप से बनाया जाता है, तो पावरशेल का उपयोग करके Azure AD में सर्विस प्रिंसिपल से जुड़े सर्टिफिकेट का थंबप्रिंट कैसे प्राप्त करें?

2
perf-guru 5 फरवरी 2020, 05:04

2 जवाब

सबसे बढ़िया उत्तर

मेरे परीक्षण के अनुसार, हम SP की प्रमुख साख प्राप्त करने के लिए निम्नलिखित Azure AD ग्राफ़ API का उपयोग कर सकते हैं। KeyCredential में customKeyIdentifier प्रमाणपत्र का थंबप्रिंट है

GET https://graph.windows.net/<your teanant id>/servicePrincipals/<your sp object id>/keyCredentials?api-version=1.6

उदाहरण के लिए

  1. एसपी बनाएं और थंबप्रिंट प्राप्त करें
$tenantId ="<tenant id>"
#use the goabl admin account to login 
Connect-AzureRmAccount -Tenant $tenantId

$certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$certificateObject.Import("E:\Cert\examplecert.pfx","Password0123!", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
Write-Host "the thumbrint of cert"
$certificateObject.Thumbprint

$keyValue = [System.Convert]::ToBase64String($certificateObject.GetRawCertData())

$sp =New-AzureRmADServicePrincipal -DisplayName "jimtestsample" -CertValue $keyValue -EndDate $endDate
$context=Get-AzureRmContext
$token=$context.TokenCache.ReadItems() |Where-Object { ($_.TenantId -eq $tenantId) -and ($_.Resource -eq "https://graph.windows.net/")  }
$accesstoken=$token.AccessToken

$url = "https://graph.windows.net/$tenantId/servicePrincipals/"+$sp.Id+"/keyCredentials?api-version=1.6"

$keyCreds = Invoke-RestMethod -Uri $url  -Method Get -Headers @{"Authorization" = "Bearer $accesstoken"}
Write-Host "--------------------------------------------"
$keyCreds.value | Select-Object customKeyIdentifier

enter image description here

enter image description here

2
Jim Xu 6 फरवरी 2020, 04:02

मैं आपके आदेश का परीक्षण करता हूं, इसे काम करना चाहिए। सर्विस प्रिंसिपल बनाने के लिए New-AzADServicePrincipal का उपयोग करते समय, यह स्वचालित रूप से आपके लिए एक एडी ऐप (यानी ऐप पंजीकरण) बनाएगा, और प्रमाणपत्र आपके एडी ऐप के Certificates & secrets में भी दिखाई देगा।

मेरे नमूने में, मैं नए Az मॉड्यूल, पुराने AzureRm मॉड्यूल के लिए, जिसे आपने इस्तेमाल किया था, उसे भी काम करना चाहिए (पूरी तरह से निश्चित नहीं, मैं आपको नए Az मॉड्यूल का उपयोग करने की सलाह देता हूं , क्योंकि AzureRm मॉड्यूल को हटा दिया गया है और इसे अपडेट नहीं किया जाएगा)। और सुनिश्चित करें कि आप पोर्टल में सही AD ऐप देख रहे हैं, क्योंकि AD ऐप का DisplayName दोहराया जा सकता है।

$cert=New-SelfSignedCertificate -Subject "CN=TodoListDaemonWithCert" -CertStoreLocation "Cert:\CurrentUser\My"  -KeyExportPolicy Exportable -KeySpec Signature
$bin = $cert.RawData
$base64Value = [System.Convert]::ToBase64String($bin)

New-AzADServicePrincipal -DisplayName joy134 -CertValue $base64Value 

enter image description here

पोर्टल में चेक करें:

enter image description here

enter image description here

फिर आप उपयोग कर सकते हैं इस तरह आपने Forbidden त्रुटि को ठीक करने का प्रयास किया है, आपका खाता कम से कम AD ऐप का Owner होना चाहिए, या यदि आपके खाते की टेनेंट में व्यवस्थापक भूमिका है जैसे Application administrator, Groups administrator, यह भी काम करेगा।

$CustomKeyIdentifier = (Get-AzureADApplicationKeyCredential -ObjectId "<object-id>").CustomKeyIdentifier
$Thumbprint = [System.Convert]::ToBase64String($CustomKeyIdentifier)

enter image description here


इसके अलावा, आपको ध्यान देना चाहिए कि अलग-अलग कमांड संयोजन अलग-अलग परिणाम देंगे, इसे देखें लिंक। इसलिए जब आप इसका परीक्षण करते हैं, तो मैं आपको मापदंडों के विभिन्न मूल्यों का उपयोग करने की सलाह देता हूं।

1
Joy Wang 6 फरवरी 2020, 06:19