ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Я сделал несколько открытий, которые меняют исходный вопрос. Пытаясь выяснить, какой файл appsettings используется, я зашел в онлайн-редактор службы приложений и изменил clientId на строку, отражающую файл, в котором они находятся. Я изменил все appsettings. Тем не менее то же сообщение об ошибке, говорящее о том, что конкретный идентификатор клиента не соответствует responseUrl. Дело в том, что ни один из файлов приложений больше не содержал этого cliendId. Итак, я начал удалять файл настройки приложения за файлом. Я перезапускал приложение после каждого удаления. Все еще то же сообщение об ошибке. Даже когда нет никаких настроек приложения, все равно то же сообщение об ошибке с тем же ClientId. Так что я думаю, что Azure, возможно, застрял с какой-то старой версией кода и не создал ничего нового, загруженного. Это объяснило бы такое поведение. Я создал новое приложение, и теперь clientId в сообщении об ошибке показывает clientId в файле appsettings, как и ожидалось. Теперь мой вопрос: может быть, есть какая-то функция супер-перезапуска, поскольку сайт, казалось, завис? Я хотел бы знать, повторится ли это снова.
Исходное сообщение:
У меня есть приложение .net core 2, использующее аутентификацию AzureAD. Он работает на моем локальном компьютере с использованием AzureAD для проверки подлинности. Но при доступе к онлайн-сайту я получаю такую ошибку:
AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application: '267b122b-b3e7-4ac0-a235-fc3019fc1e49'.
Я проверил URL-адрес в AppRegistration / ReplyURLs и его https://siteadress.azurewebsites.net
Я также проверил, правильно ли указан applicationId в appSettings.json
.
На самом деле у меня четыре версии одного и того же кода. Локальные сайты и сайты Azure в моей учетной записи Azure компании. Локальные сайты и сайты Azure в моей тестовой учетной записи Azure.
Все они работают, кроме лазурной версии, в учетной записи моей компании.
Это сообщение об ошибке, в котором говорится, что URL-адрес ответа не совпадает, показывает вверх все, что я вставил в appsettings.json
. Я попытался разместить неверную информацию в applicationId, tennantId и домене. Я пробовал много раз и каждый раз перезапускал сайт. Тем не менее, я получаю это сообщение об ошибке. Итак, я пришел к выводу, что сайт не читает appsettings.json
.
Я проверил настройки приложения на лазурном портале, и у него есть только DEFAULT_NODE_DEFAULT_VERSION 6.9.2.
Файл appsettings.json правильный.
Когда я меняю идентификатор приложения в appsettings.development.json
на «HelloWorld» и запускаю сайт локально, я получаю сообщение об ошибке, указывающее, что для приложения «HelloWorld» не настроен соответствующий URL-адрес ответа. Так я могу видеть, как его читают. Но не на лазурном участке.
Вот что находится в разделе Azure на appSettings.json
:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"GraphInstance": "https://graph.microsoft.com",
"GraphVersion": "v1.0",
"Domain": "xxxxx.onmicrosoft.com",
"TenantId": "xxxx-862d-4076-8aaf-e504b2cdd263",
"ClientId": "267b122b-b3e7-4ac0-a235-fc3019fc1e49!",
"ClientSecret": "*******************************",
"Scopes": "openid email profile offline_access",
"CallbackPath": "/signin-oidc",
"BaseUrl": "https://siteadress.azurewebsites.net"
}
launchSettings.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:1940/",
"sslPort": 44371
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "http://localhost:1940/",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"HiQ_Adress": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:1941/"
}
}
}
Startup.cs
public class Startup
{
public const string ObjectIdentifierType = "http://schemas.microsoft.com/identity/claims/objectidentifier";
public const string TenantIdType = "http://schemas.microsoft.com/identity/claims/tenantid";
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAd(options => Configuration.Bind("AzureAd", options))
.AddCookie();
services.Configure<AzureAdOptions>(Configuration.GetSection("AzureAd"));
services.AddSingleton<IMyProfileAppService, MyProfileAppService>();
services.AddSingleton<IAddressAppService, AddressAppService>();
services.AddSingleton<IAuthenticationHelper, AuthenticationHelper>();
services.AddSingleton<IAzureAdUserService, AzureAdUserService>();
services.AddSingleton<IGraphApiClient, GraphApiClient>();
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
// template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Я не уверен. Но у меня есть тот же код, работающий в моей частной учетной записи Azure. Однако я заглянул в launchsettings.json. Я вставлю в исходный пост.
покажите, как вы настраиваете источники конфигурации в своем приложении с помощью IConfigurationBuilder
также кое-где вы написали appSettings.json
, а кое-где - appsettings.json
. Имейте в виду, что имя файла чувствительно к регистру для метода .AddJsonFile
.
@ Установите конструктор по умолчанию при использовании шаблона Microsoft. Я покажу это через минуту. По поводу написания. Я проверю это в коде, но он должен быть таким же.
@Set Ive обновил исходное сообщение с помощью startup.cs. Спасибо за ваше время!
Я обновил операцию, добавив несколько новых открытий.
@ Лаутаро, ты выяснил причину?
@AnupKattel Нет. До сих пор не ясно, почему он так упал. Но у меня больше нет этой проблемы после удаления и повторения всего.
Вы уверены, что на производстве он не ищет appsettings.production.json, это зависит от параметра ASPNETCORE_ENVIRONMENT.