Несанкционированный ответ с ошибкой недопустимой аудитории для Azure AD + ASP.Net Core 2.1

Я разработал пользовательский интерфейс и веб-API, используя ASP.net Core 2.1 с аутентификацией Azure AD. Оба зарегистрированы с помощью регистрации в приложении Azure. Я использую приведенный ниже код в пользовательском интерфейсе. Но я получаю несанкционированную ошибку.

string AZURE_AD_INSTANE = "https://login.microsoftonline.com/";
string TENANT_ID = "<tenant GUID>";
string CLIENT_ID = "<Client GUID ofWeb API>";
string SECRET = "<Secret created for Web API under Certificates & secrets>";
string RESOURCE = "https://MyOrg.onmicrosoft.com/TestWebAPI"; //Application ID URI set in Expose an API
ClientCredential ClientCredential = new ClientCredential(CLIENT_ID, SECRET);
string authority = String.Format("{0}{1}", AZURE_AD_INSTANE, TENANT_ID);


AuthenticationContext authContext = new AuthenticationContext(authority);
string accessToken = authContext.AcquireTokenAsync(RESOURCE, ClientCredential).Result.AccessToken;

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://localhost:44326/api/values/Get");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = client.SendAsync(request).GetAwaiter().GetResult();

string status = response.StatusCode.ToString();

StartUp.cs

public void ConfigureServices(IServiceCollection services)
{
      services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
                .AddAzureADBearer(options => Configuration.Bind("AzureAd", options)); 
       services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

введите описание изображения здесь

Я получаю токен доступа. Когда я захожу на сайт jwt.io, появляется надпись «Подпись проверена». Но вызов API дает код статуса неавторизованного ответа. Когда я проверяю заголовок ответа, он содержит следующую информацию: {Bearer error = invalid_token, error_description = Аудитория недействительна}

Я видел много сообщений, связанных с этой ошибкой. Но не получил никакого решения. Так что кто-нибудь, пожалуйста, скажите мне предложение по решению этой проблемы.

Спасибо.


comment
Мне нужно, чтобы вы предоставили снимок экрана, перейдите в ад ›ваше приложение› Откройте API, чтобы предоставить снимок экрана.   -  person Carl Zhao    schedule 03.11.2020
comment
@Carl, я предоставил скриншот, как вы и просили. Пожалуйста, проверьте это и дайте мне знать ваше предложение.   -  person VKD    schedule 03.11.2020
comment
В ответ я получаю сообщение об ошибке: {Bearer error = invalid_token, error_description = Аудитория недействительна} для ответа.Headers.WwwAuthenticate   -  person VKD    schedule 03.11.2020


Ответы (1)


Убедитесь, что https://MyOrg.onmicrosoft.com/TestWebAPI зарегистрирован как допустимая аудитория в вашем WebAPI:

.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidAudiences = new List<string> 
        {
            "https://MyOrg.onmicrosoft.com/TestWebAPI",
            "..."
        }
    }
};
person Alfredo R    schedule 02.11.2020
comment
Я обновил свой пост методом Startup class ConfigureServices (). Он уже содержит AddAzureADBearer. Если я заменю его вашим кодом AddJwtBearer, я получаю внутреннюю ошибку сервера. Мне нужно что-то еще делать? - person VKD; 03.11.2020
comment
@Kattesang AddJwtBearer внутренне вызывается AddAzureADBearer. Вам необходимо восстановить и настроить зарегистрированные IOptions ‹JwtBearerOptions›. - person Alfredo R; 03.11.2020