1

我有一個標記爲「Public(authenticated)」的Azure API應用程序,並在關聯的網關中設置了Azure Active Directory身份,詳見Protect an API App使用ADAL對Azure API應用程序進行身份驗證

然後,我在同一個Azure Active Directory租戶中創建了本機應用程序,並添加了以委派權限訪問網關的權限。

使用ADAL和下面的代碼,我能夠成功地進行身份驗證並獲取訪問令牌,但我無法弄清楚如何使用它來訪問我的API應用程序。

string Tenant = "[xxx].onmicrosoft.com"; 
string Authority = "https://login.microsoftonline.com/" + Tenant; 
string GatewayLoginUrl = "https://[gateway].azurewebsites.net/login/aad"; 
string ClientId = "[native client id]"; 
Uri RedirectUri = new Uri("[native client redirect url]"); 

async Task<string> GetTokenAsync() 
{ 
    AuthenticationContext context = new AuthenticationContext(Authority); 
    PlatformParameters platformParams = new PlatformParameters(PromptBehavior.Auto, null); 
    AuthenticationResult result = await context.AcquireTokenAsync(GatewayLoginUrl, ClientId, RedirectUri, platformParams); 

    return result.AccessToken; 
} 

我測試過的API應用程序手動輸入x-zumo-auth header我在Chrome得到和它的作品的話,但不能與我開始使用ADAL令牌。我也嘗試過他們的sample code中描述的瀏覽器表單,但它並不提供刷新標記。

如何設置我的驗證碼,以便我的API應用程序可以使用TokenCache和ADAL?

授權:承載ThisIsTheAccessTokenYouRecievedFromADAL

+0

我有同樣的問題。使用ADAL收到的accessToken總是給我一個403:禁止的響應。我已經嘗試了Windows控制檯.NET客戶端和Cordova客戶端。兩者都是相同的結果。當API應用程序是公共匿名時,沒有Probs,但403使用公開身份驗證。這個問題你有什麼進展嗎? – Mark

+0

@Mark我決定延遲使用api網關,直到它得到更好的支持,並使用owin openid和承載認證。這意味着身份驗證邏輯回到了api應用程序中,但它起作用。 – jeffaudio

回答

0

通常你調用Web API時,當傳遞授權頭的訪問令牌。將Microsoft.Azure.AppService SDK(-pre)Nuget包安裝到您的客戶端項目。

您可以在GitHub上AzureCards樣品中更多的細節 - https://github.com/Azure-Samples/API-Apps-DotNet-AzureCards-Sample

+0

這對我來說也適用於其他Web API(Web應用程序),但是我從API應用程序中獲得了403禁止。 – jeffaudio

+1

目前,您希望使用x-zumo-auth頭來完成此操作。這裏有關於如何執行此操作的信息:https://azure.microsoft.com/en-us/documentation/articles/app-service-api-dotnet-add-authentication/。完整的OAuth2支持即將出現,但我承認我不瞭解此功能的ETA。 –

0

您可能需要使用AppServiceClient對用戶進行認證,並調用受保護的API應用程序的端點

+0

這個例子允許我進行身份驗證,但是強制用戶每次都重新輸入憑據,並且它使用Windows窗體,這不是我想要的。如果API-Apps WebApp示例已通過身份驗證,則可能會指向正確的方向。 – jeffaudio

相關問題