我正在爲客戶端構建一個Azure Web應用程序,該應用程序將爲其客戶提供許多其他目錄。這個應用程序會在我的客戶端目錄中調用一個Web API,然後它將回調到客戶目錄中的另一個Web API。類似這樣的:租戶之間使用Azure託管服務身份的異常
Other Customer AAD1 --------- My client AAD2
App --------------------------------> Web API 2
Web API 1 <-------------------------- Web API 2
我們已經能夠獲得第一個電話的工作。這需要在AAD1中爲Web API 2提供相應的應用程序註冊。我們認爲,我們可以通過遵循相同的模式,使用AAD2中的Web API1註冊來使回調工作。然而,這可能是我客戶的AAD中很多「代理」註冊,所以我們正在尋找替代方案。
我們正在探索使用託管服務標識,我們認爲這將允許我們獲取對其他租戶資源有效的標記。如果有更好的方法,我肯定有興趣瞭解它。
我已經按照從這裏使用Microsoft.Azure.Services.AppAuthentication庫中的代碼示例:https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity#obtaining-tokens-for-azure-resources
// In Web API 2
using Microsoft.Azure.Services.AppAuthentication;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync(
"https://<App ID URI for Web API1>");
網站API2被配置爲具有託管服務標識。
我目前正在我的本地機器上運行這個服務,並且我已經安裝了Azure CLI並且已經登錄了。我已經嘗試了'az賬戶get-access-token',並且我得到了一個有效的令牌。
當網絡API2試圖獲得令牌才能夠調用Web API1,我得到一個異常:
Parameters: Connectionstring: [No connection string specified], Resource: , Authority: . Exception Message: Tried the following 2 methods to get an access token, but none of them worked.
Parameters: Connectionstring: [No connection string specified], Resource: , Authority: . Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup.
Parameters: Connectionstring: [No connection string specified], Resource: , Authority: . Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. ERROR: Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID '04b07795-8ddb-461a-bbee-02f9e1bf7b46' named 'Web API 1'. Send an interactive authorization request for this user and resource.\r\nTrace ID: f5bb0d4d-6f92-4fdd-81b7-e82a78720a00\r\nCorrelation ID: 04f92114-8d9d-40c6-b292-965168d6a919\r\nTimestamp: 2017-10-19 16:39:22Z","error_codes":[65001],"timestamp":"2017-10-19 16:39:22Z","trace_id":"f5bb0d4d-6f92-4fdd-81b7-e82a78720a00","correlation_id":"04f92114-8d9d-40c6-b292-965168d6a919"}
有趣的是,有ID爲「04b07795-8ddb-461A-bbee-沒有應用程序在AAD1或AAD2中爲「02f9e1bf7b46」。這是一個已知的Azure應用程序嗎?我認爲它可能是服務管理API,但我不確定。
無論如何,我不確定授予權限的正確方法。我已經嘗試建立不同內容的URL像這樣到我的瀏覽器,但沒有人似乎已經完成了招:
https://login.microsoftonline.com/(AAD1 ID)/adminconsent
?client_id=(App ID)
&redirect_uri=https://localhost:44341
&resource=(App ID URI for Web API1)
&prompt=admin_consent
https://login.microsoftonline.com/(AAD1 ID)/adminconsent
?client_id=04b07795-8ddb-461a-bbee-02f9e1bf7b46
&redirect_uri=https://localhost:44341
&resource=(App ID URI for Web API1)
&prompt=admin_consent
(這最後一個告訴我的答覆URL不正確,因爲它不是一個我的應用程序,我找不到回覆URL)
請注意租戶是AAD1。
我錯過了什麼,或者我沒有正確使用此功能?
在此先感謝。
Web API 1(您提到的API是「在客戶目錄中」)在功能上對於每個租戶是不同的(例如,一個客戶租戶中的Power BI和另一個客戶租戶中的SharePoint Online)?或者是同一個API的不同實例(例如Power BI--對於一個客戶_和Power BI--對於其他客戶的租戶)?誰控制Web API 1的代碼?你的客戶?或者你的客戶的客戶? –
Web API1是每個客戶使用相同API的不同實例,我的客戶將擁有並分發此API。謝謝! –