我們編寫了一套Powershell腳本,以便在Azure環境中自動創建我們的Web應用程序的新實例。這些腳本的一部分使用Graph API創建一些Azure AD對象,以及Auth0中的對應對象,我們將它們用於單點登錄。到目前爲止,我們還沒有成功地以編程方式爲AAD應用程序創建新密鑰。我們已經嘗試了很多方法,雖然我們可以看到生成的應用程序確實有一個密鑰(並且Auth0中的連接對象在其「客戶機密鑰」字段中具有該密鑰),但我們在嘗試進行身份驗證時總是收到此錯誤:自動創建Azure AD Web應用程序密鑰
通過這一點,我們已經獲准進入該應用的單點登錄和AAD讀取目錄數據。 (編輯:我們通過手動繼provisioning_ticket_URL是由Auth0 API調用返回創建Connection對象對象的一部分做這個網址提示我們選擇Azure的憑據,然後顯示此頁:
)
直到我們通過Azure門戶爲應用程序手動創建新的密鑰,保存應用程序並將新創建的密鑰複製到Auth0連接之後,此錯誤仍然存在。這樣做總能解決問題,但我們希望避免這一額外步驟。
內,我們正在創建的API調用的應用程序AAD的身上,我們有這樣的節定義鍵:
"passwordCredentials":
[
{
"startDate": "2016-10-28T20:40:32Z",
"endDate": "2017-10-29T20:40:32Z",
"keyId": "(a GUID)",
"value": "(a Base64 string)"
}
],
至於那些價值,我們試圖產生它們有很多不同的方法,它接受API PUT調用的值,但當我們嘗試登錄時,它們仍然會給我們提供同樣的錯誤。作爲一個例子,我們嘗試的一種方法是插入$ appKeyGUID中的值和$ appKeyValue from:
$appKeyGUID = [guid]::NewGuid()
$guidBytes = [System.Text.Encoding]::UTF8.GetBytes($appKeyGUID)
$appKeyValue = [System.Convert]::ToBase64String($guidBytes);
into keyID and value,respe沉着應對。我已經在其他地方看過,值應該是44個字符長,但這不是。
但似乎價值本身可能不是問題。我嘗試通過Azure門戶生成密鑰,使用Graph API GET調用來檢索keyId,然後將這兩個確切值硬編碼到應用程序正文中,但登錄仍然會產生相同的錯誤。
任何想法,我要去哪裏錯了?
編輯:根據Philippe的建議,我試圖通過門戶只更改AD應用程序的顯示名稱,並且確實解決了問題。這導致我認爲,應用程序正文中的其他地方可能存在錯誤,這些錯誤在通過門戶進行保存時正在解決。我查了清單之前,做的是手動保存後,並確實有一個小的區別:RequiredResourceAccess部分(其中我從這裏http://www.cloudidentity.com/blog/2015/09/01/azure-ad-permissions-summary-table/這裏https://www.microsoftpressstore.com/articles/article.aspx?p=2473127&seqNum=2學會)中,我有這樣的:
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role"
},
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Scope"
}
代替這門戶網站將其更改爲
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role,Scope"
},
所以我改變了我們發送的身體以匹配第二種格式。不幸的是,我們仍然在這個變化中遇到同樣的錯誤。此外,我驗證了在門戶上進行保存之前和之後清單現在是相同的,就像在應用程序上通過API GET調用返回的正文一樣。必須有其他其他門戶保存更改除應用程序的定義之外。
之後,我嘗試使用Graph API執行兩個PATCH調用來更新顯示名稱,然後將其更改回來,希望它的行爲類似於通過門戶進行並解決問題。我通過門戶驗證PATCH調用確實正在改變應用的顯示名稱。可悲的是,似乎這些編輯沒有解決問題,我仍然得到原始錯誤。
我們創建這樣的圖形API調用應用程序:
$uri = "https://graph.windows.net/$waadTenant/applications?api-version=1.6"
$newADApp = (Invoke-RestMethod –Uri $uri –Headers $authHeader –Method POST -Body $newappbody –Verbose)
這裏是我們最終使用來定義應用程序的$ newappbody。我爲硬件故障排除了一些硬編碼:
{
"odata.type": "Microsoft.DirectoryServices.Application",
"displayName": "customer1",
"homepage": "https://customer1.(our tenant).com",
"identifierUris":
[
"https://customer1.(our tenant).com"
],
"replyUrls":
[
"https://(our tenant).auth0.com/login/callback"
],
"passwordCredentials":
[
{
"startDate": "(a hardcoded date)",
"endDate": "(a hardcoded date)",
"keyId": "(hardcoded GUID that was previously generated by the portal and extracted through an API GET)",
"value": "(hardcoded Base64 like above)"
}
],
"requiredResourceAccess":
[
{
"resourceAppId": "00000002-0000-0000-c000-000000000000",
"resourceAccess":
[
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role,Scope"
},
{
"id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
"type": "Scope"
},
{
"id": "6234d376-f627-4f0f-90e0-dff25c5211a3",
"type": "Scope"
}
]
}
]
}
嘗試更改只顯示名稱,並保存應用程序(無需創建一個新的密鑰)。這是否也解決了這個問題?你能分享你用來在Azure AD中創建對象的代碼嗎?你提到你已經「授予」應用登錄和閱讀目錄的權限 - 你是如何做到這一點的? –
@PhilippeSignoret感謝您花時間回覆,Philippe。我已經更新了相應的問題 - 請參閱上面編輯的部分。 – MGS