我瀏覽了有關使用Oauth保護在線Azure活動目錄中的WebAPI的所有教程。但不幸的是,他們都不能工作。使用Oauth保護帶有Azure活動目錄的WebAPI
我正在使用VS 2017,我的項目是.net核心。
到目前爲止,我曾嘗試是:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
ervices.AddAuthentication(); // -----------> newly added
}
在 「配置」,我說:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]),
Audience = Configuration["AzureAd:Audience"],
});
這裏是我的配置:
"AzureAd": {
"AadInstance": "https://login.microsoftonline.com/{0}",
"Tenant": "tenantname.onmicrosoft.com",
"Audience": "https://tenantname.onmicrosoft.com/webapiservice"
}
我已經註冊了這個在我的AAD上的「webapiservice」(鏈接是:http://webapiservice.azurewebsites.net)。
此外,爲了訪問此web api服務,我創建了一個webapi客戶端「webapiclient」,它也是一個web api,並且在我的AAD上註冊並請求訪問「webapiservice」的權限。該客戶端的WebAPI鏈接:http://webapiclient.azurewebsites.net
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://webapiservice.azurewebsites.net/");
//is this uri correct? should it be the link of webapi service or the one of webapi client?
HttpResponseMessage response = client.GetAsync("api/values").Result;
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsAsync<IEnumerable<string>>().Result;
return result;
}
else
{
return new string[] { "Something wrong" };
}
所以從理論上講,我應該從webapiservice得到正確的結果。但我總是收到「有問題」。
我在這裏錯過了什麼嗎?
您是不是將身份驗證令牌添加到請求? – juunas
這是什麼意思?是不是由AAD管理? – derek
您的應用必須獲取它。它可以使用各種方式來做到這一點,例如它可以使用客戶端ID和祕密來向AAD證明它是這個應用程序,並且需要該API的令牌。然後AAD會給你一個令牌,讓你可以附加請求。 – juunas