Мой вопрос касается Active Directory (AD), служб федерации Active Directory (ADFS), Single Sing On (SSO) и SAML.
У нас есть клиент-серверное приложение со следующими спецификациями: - Клиент: Собственный клиент WPF .NET на основе .NET 4.7.2 и C # - сервер: REST-служба на основе Java Spring
Одним из основных требований является единый вход с AD / ADFS.В лучшем случае пользователь должен пройти аутентификацию без шуток / без звука.
Основное ограничение - AD и ADFS на основе Windows Server 2012 R2.
На следующем рисунке вы можете узнать, как мы планировали внедрить SSOс ADFS.
SSO-сценарий
- Собственный клиент .NET пытается использовать REST-сервис без аутентификации.
- Служба REST перенаправляет собственный клиент .NET на сервер ADFS.
- Собственный клиент .NET пытается получить SAML-токен с текущими зарегистрированными учетными данными пользователя (вход в Windows).
- Если текущему пользователю не предоставлено, ADFS-сервер отвечает иSAML-токен.
- Собственный клиент .NET берет SAML-токен и передает его в REST-сервис.
- Если SAML-токен принят, доступ пользователя предоставляется.
- Если SAML-токен не принят, пользователь должен получить экран входа в приложение.
В настоящее время я полностью запутался в отношении единого входа с ADFS в .NET Native Client.Я не могу найти подходящих демонстраций и т. Д. Многие демонстрации или примеры использования касаются ASP.NET, но почти ничего не говорят о нативных клиентах.Я начинаю задумываться, не верны ли мои предположения о SSO с AD / ADFS и SAML.
Я начал создавать AD-ADFS-Lab с виртуальными машинами, описанными в Общие сведения о ADFS и введение в ADFS .Затем я пытаюсь поиграть с ADFS-сервером, но не могу этого сделать.
Я смотрю на следующие библиотеки:
После 1 недели исследований у меня кружится голова:
- Нужен ли WIF?
- А как насчет WCF?
Я знаю, что есть OAuth.Я знаю, что Windows Server 2012 не самый последний и лучший для этого сценария.Но Требования и Ограничения исходят непосредственно от нашего Клиента.
- Что я могу сделать?
- Что я могу прочитать или попробовать?
- Есть ли другие библиотеки?
- Есть ли Examplex?
Обновление
Мне удалось "поговорить" с моим ADFS-сервером с помощью WS-Trust и получить SAML-токен.
private static void Main(string[] args)
{
string adfs = "https://ad-fs.adlab.local";
string adfsEndpoint = "https://ad-fs.adlab.local/adfs/services/trust/13/usernamemixed";
string appServer = "https://ad-server.adlab.local/sampapp/";
var factory = new WSTrustChannelFactory(new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), adfsEndpoint);
factory.TrustVersion = TrustVersion.WSTrust13;
var channelCredentials = factory.Credentials;
channelCredentials.UserName.UserName = "Administrator@adlab";
channelCredentials.UserName.Password = "SsoLab2019";
channelCredentials.SupportInteractive = false;
RequestSecurityToken rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
AppliesTo = new EndpointReference(appServer),
KeyType = KeyTypes.Bearer
};
var channel = factory.CreateChannel();
try
{
var token = (GenericXmlSecurityToken)channel.Issue(rst);
Console.Write(token.TokenXml.OuterXml);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
Нет, мне нужно выяснить, как я могу получить SAML-токен без вывода сообщений /бесшовные.