У меня возникла проблема при попытке защитить службу веб-API с помощью OpenId connect и ADFS 2016.
У меня есть собственный мобильный клиент, который успешно получает токен доступа, обновления и Id из ADFS после ввода их учетных данных на странице входа в систему.
Однако, когда я использую этот токен для доступа к своему простому методу веб-API, он всегда отображает страницу входа
Вот мой Startup.cs
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
var cookieAuthenticationOptions = new CookieAuthenticationOptions();
app.UseCookieAuthentication(cookieAuthenticationOptions);
var openIdConnectAuthenticationOptions = new OpenIdConnectAuthenticationOptions
{
ClientId = "**<myclientid>**",
MetadataAddress = "https://**<myFullyQualifiedDomainName>**/adfs/.well-known/openid-configuration",
PostLogoutRedirectUri = "my.client.native://callback",
RedirectUri = "my.client.native://callback",
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = (context) =>
{
Debug.WriteLine("*** RedirectToIdentityProvider");
return Task.FromResult(0);
},
MessageReceived = (context) =>
{
Debug.WriteLine("*** MessageReceived");
return Task.FromResult(0);
},
SecurityTokenReceived = (context) =>
{
Debug.WriteLine("*** SecurityTokenReceived");
return Task.FromResult(0);
},
SecurityTokenValidated = (context) =>
{
Debug.WriteLine("*** SecurityTokenValidated");
return Task.FromResult(0);
},
AuthorizationCodeReceived = (context) =>
{
Debug.WriteLine("*** AuthorizationCodeReceived");
return Task.FromResult(0);
},
AuthenticationFailed = (context) =>
{
Debug.WriteLine("*** AuthenticationFailed");
return Task.FromResult(0);
}
}
};
app.UseOpenIdConnectAuthentication(openIdConnectAuthenticationOptions);
}
}
Когда я вызываю мой метод GET Web API, я вижу уведомление об опциях открытого идентификатора для RedirectToIdentifyProvider в отладчике, ни одно из других уведомлений не срабатывает. Я предполагаю, что в этот момент было решено, что страница входа должна быть представлена снова. В ответ на мой HTTP GET я получаю HTML-код страницы входа в ADFS.
У кого-нибудь есть идеи о том, как заставить это работать с нативным клиентом, пытающимся получить доступ к методу сервиса webapi? Насколько я могу сказать, это правильно. Моя проблема заключается в том, что большинство примеров для веб-страницы, доступ к веб-API. Я не уверен в настройке типа аутентификации для использования куки. Это правильно?
Также следует использовать app.UseOpenIdConnectAuthentication для собственного клиента или использовать другое промежуточное ПО OWIN.
Буду признателен за любой вклад, поскольку я потратил много времени, пытаясь выяснить, что не так.
Заранее спасибо.