我有一個web api服務和一個web客戶端應用程序來訪問web api。兩者都在azure活動目錄中註冊。 然而,當web客戶端應用程序試圖訪問網絡的API,我得到:UseJwtBearerAuthentication失敗:未經授權的令牌和簽名無效
ReasonPhrase: 'Unauthorized'
WWW-Authenticate: Bearer error=\"invalid_token\", error_description=\"The signature is invalid
然後我檢查了令牌上https://jwt.io/,它確實顯示爲「無效簽名」。但是,我不知道這裏有什麼問題。
這是我如何檢索到的令牌:
string authority = "https://login.windows.net/tenantid-log-number/oauth2/token";
string clientID = "83adf895-681a-4dd6-9dfb-2a1484dd4188";
string resourceUri = "https://tenant.onmicrosoft.com/webapiservice";
string appKey = "anJxg3N/5dqiHKx+4zwzFB9A6dN5HdqSitdSOpxzVd=";
ClientCredential clientCredential = new ClientCredential(clientID, appKey);
AuthenticationContext ac = new AuthenticationContext(authority);
Task<AuthenticationResult> authResult = ac.AcquireTokenAsync(resourceUri, clientCredential);
return authResult.Result.AccessToken;
這是我如何訪問Web API服務:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://webapiservice.azurewebsites.net/");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = client.GetAsync("api/values").Result;
這裏是網頁API服務如何驗證訪問:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = true,
ValidAudience = "https://tenant.onmicrosoft.com/webapiservice",
}
});
這裏有什麼問題嗎?
感謝
不完全確定這是否會有所幫助,因此我將添加以下內容作爲註釋。我沒有看到你在設置觀衆,也沒有在網絡api中的權威,在這裏看到一個示例https://github.com/Azure-Samples/active-directory-dotnet-webapi-getting-started/blob/master /README.md。此外,jwt.io不會驗證令牌簽名,除非您按照此步驟操作http://nzpcmad.blogspot.com.ar/2016/08/oauth2-verifying-azure-ad-jwt-signature.html – andresm53