2016-02-15 3 views
1

Я пытаюсь написать WPF-клиент, который использует ADAL для аутентификации против ADFS на Windows Server 2012 R2. Я успешно реализовал это с помощью «Аутентификации форм», где пользователю предлагается ввести имя пользователя и пароль. Тем не менее, я хочу использовать SSO и использовать зарегистрированного пользователя домена для аутентификации против ADFS.SSO от ADAL в WPF-клиенте в ADFS 3.0 на Windows Server 2012 R2

К сожалению, я только получаю сообщение об ошибке, говорящее:

Эта перегрузка метод не поддерживается «< ADFS имясервера>»

Я сделал много поиска, но найти часть информации противоречива:

  • Это ТАК размещать о Windows Store App (любые различия в WPF?), где Vittorio Bertocci ссылки на блог о том, как достичь этого: ADAL for Windows Store SSO

  • Этот SO пост, где Витторио Bertocci утверждает, что молчание аутентификации возможно только с Windows Server 2016: Authenticate with ADFS inside Console App silently

ли это тот факт, что Windows Server 2016 требуется для выполнения единого входа в сочетании с ADAL? Есть ли другой способ сделать это?

EDIT:

После обновления до последней альфа Адал (3.9.302111717-альфа) я получаю более подробное сообщение об ошибке

MSIS9611: Сервер авторизации не поддерживает запрошенному «grant_type». Сервер авторизации поддерживает только «authorization_code» или «refresh_token» в качестве типа гранта.

код Я выполнения заключается в следующем:

string authority = "https://myServer.com/adfs"; 
string resourceURI = "http://myApp/"; 
string clientId = "XXXX-XXX-XXXX-XXXX-XXXXX"; 
string clientReturnUri = "http://anarbitraryreturnuri/"; 

var ac = new AuthenticationContext(authority, false); 
var token = await ac.AcquireTokenAsync(resourceURI, clientId,new UserCredential()); 

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

oauth2 конечная точка выглядит следующим образом: OAuth2 endpoint configuration

Кроме того, моя глобальная политика аутентификации устанавливается следующим образом:

Global Authentication Policy settings

ответ

1

Windows Server 2016 требуется только для гранта пароля - в которые вы предоставляете сырое имя пользователя и пароль. Ваш вопрос, похоже, предполагает, что вы хотите войти в систему с пользователем, подписанным в настоящее время, и вместо этого использовать Kerberos. Аутентификация на основе Kerberos должна работать с ADFS «3» и ADFS 2016 равнодушно - пока ваш клиент подключен к сети домена, локальная машина не имеет настроек конфиденциальности, которые не позволяют вашему приложению узнать пользователя, который в настоящий момент зарегистрирован и правильные конечные точки включены в экземпляре ADFS.

+0

Спасибо, @vibronet. Однако у меня все еще есть проблемы. Я обновил свой пост с дополнительной информацией. Можете ли вы увидеть все, что могло бы стать источником моих проблем? –

+0

Теперь я лучше понимаю ваш сценарий, спасибо за дополнительные подробности. В Windows Server 2012 R2 этот метод не будет работать напрямую с ADFS - он работает только в том случае, если ADFS объединяется с Azure AD. Если вы хотите придерживаться 2012 года, вам нужно вызвать AcquireToken так же, как и для проверки подлинности форм, но используйте PromptBehavior.Never. * Из интрасети * этот результат shoudl в SSO, учитывая, что он использует невидимый браузер, который должен аутентифицироваться непосредственно против конечной точки Kerberos. – vibronet

+0

Еще раз спасибо. Переход на использование Promptbehavior.Never дает «Требуемый ресурс требует аутентификации пользователя». Promptbehavior.Auto выводит журнал безопасности Windows, но после входа в Adal не удается выполнить «Запрос не может быть обработан сервером из-за недействительного синтаксиса». Я подозреваю, что моя конфигурация ADFS может быть отключена, это моя первая настройка. –