2014-09-11 42 views
3

想象一下在Windows Azure中註冊的客戶端和服務應用程序。如何對WebAPI執行無人值守的oauth/openid身份驗證?

客戶端是一個控制檯,並在本地運行無人值守(例如,在一夜之間執行測試) 該服務是受oAuth保護的WebAPI服務,通常使用Azure託管的OpenID Connect進行訪問。

客戶端如何在沒有任何用戶登錄交互的情況下對服務進行身份驗證(即應用程序使用ADAL .Net對服務進行身份驗證)?

我試過ADALDaemon to WebAPI sample但它仍然會彈出一個身份驗證對話框...

謝謝!

[編輯]下面是一些代碼,顯示非常大概如何我從客戶端進行通信。所有的應用ID等都是正確的。

var authContext = new AuthenticationContext("https://login.windows.net/common"); 
var result = await authContext.AcquireTokenAsync(ServiceAppId, ClientCredential); 
var client = new HttpClient 
{ 
    BaseAddress = new Uri("https://localhost:44301/"), 

}; 
client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue(
     AuthenticationHeaderScheme.Bearer, 
     result.AccessToken); 
var response = await client.GetAsync("api/something"); 
var jsonString = response.Content.ReadAsStringAsync().Result; 

這只是產生的登錄頁面的HTML ...

我也嘗試添加[HostAuthentication("OAuth2Bearer")]等,以服務API控制器和OWIN啓動邏輯,但無濟於事增加,如:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
    { 
     TokenValidationParameters = new TokenValidationParameters 
     { 
      ValidAudience = myRealm, 
     }, 

     Tenant = "mytenant.onmicrosoft.com", 
     AuthenticationType = BearerAuthenticationType.OAuth2Bearer, 
    }); 
+0

你用什麼作爲你的AS? Azure AD? – BenV 2014-09-11 15:23:09

+0

Azure AD,是的。除了這種情況,一切都很好。 – Richard 2014-09-11 21:44:38

+0

[這個人](http://stackoverflow.com/questions/25781752/failing-to-authenticate-using-token-acquired-with-adal)也在我的後面發佈了同樣的問題。從互聯網瀏覽看,這似乎是一個經常遇到的問題,但我找不到明確的答案。 – Richard 2014-09-11 21:46:34

回答

2

編輯:重新閱讀原文,我想我現在明白髮生了什麼事情。你提到你在你的應用上有OpenId Connect,並且當你點擊Web API時,你會得到HTML。我懷疑當您點擊Web API而不是Oauth2中間件時,會觸發OpenId Connect中間件。如果是這種情況,我建議您參考http://www.cloudidentity.com/blog/2014/04/28/use-owin-azure-ad-to-secure-both-mvc-ux-and-web-api-in-the-same-project/以獲取有關如何在同一項目中共存基於重定向的中間件和OAuth2受保護資源中間件的說明。您是否嘗試過https://github.com/AzureADSamples/NativeClient-Headless-DotNet? 這應該做你正在尋找的東西。對不起,在電話上:-) HTH V.

+0

感謝您花時間提供此信息。這聽起來不錯,不是嗎?我現在在其他「東西」上關閉了這種東西:)但是當我有機會的時候我會看一看。只想在此期間感謝指針。 – Richard 2015-01-07 11:36:35

+0

你有沒有解決這個問題?試圖對.NET Core Webapp/WebApi做同樣的事情,我也只是看到登錄頁面! – Raj 2017-03-09 14:12:39