Моя проблема заключается в том, что я не могу заставить работать аутентификацию Azure AD при создании регистраций приложений (на портале Azure) вручную.
Все работает нормально, если я создаю новый веб-сайт с использованием шаблона MVC 5 и позволяю Visual Studio (2017) создать новую регистрацию приложения.
Когда я пытаюсь использовать созданный мной файл, он не работает, и я получаю следующее исключение:
трассировка стека:
в
Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.d__8.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача)
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.d__3.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (Задача)
в
Microsoft.IdentityModel.Protocols.ConfigurationManager`1.d__24.MoveNext ()
Код запуска, который я использую в обоих:
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
private static string tenant = ConfigurationManager.AppSettings["ida:TenantId"];
private string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
}
},
TokenValidationParameters = new TokenValidationParameters
{
RequireSignedTokens = false,
},
});
}
Единственное отличие, которое мне удалось обнаружить, заключается в том, что автоматически созданная регистрация приложения имеет один ключ, а его манифест содержит "passwordCredentials".
Приложение, созданное вручную, не имеет его. Я использую IIS Express для обоих сайтов. И идентификатор приложения, и идентификатор арендатора верны, а также порт HTTPS. Все пакеты OWIN имеют одинаковую версию (в обоих приложениях). Я думаю, что IIS Express каким-то образом использует этот ключ сверху, но я не мог найти, где и как он применяется, поскольку мой код запуска точно такой же. Любая помощь приветствуется
PS: Я также пытался разместить его на локальном IIS с тем же результатом ...