У меня есть доказательство концепции W8.1-приложение, которое позволяет аутентифицировать пользователя с помощью Azure Active Directory с использованием библиотеки ADAL.ADAL: приложение W8.1 пытается зарегистрировать пользователя
У меня есть часть, позволяющая пользователю войти в систему и получить доступ к моим ресурсам. Однако он должен иметь возможность разрешить пользователю выйти из системы и разрешить другому пользователю входить в систему на одном устройстве.
Я нашел другие вопросы, на SO и в других местах, относительно аналогичного вопроса, но на IOS или в WPF-приложении. Там они предложили называть <AuthenticationContext>.TokenCache.Clear()
и очистки куки с помощью с помощью следующего вызова:
private void ClearCookies()
{
const int INTERNET_OPTION_END_BROWSER_SESSION = 42;
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
}
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
Ни работы (даже при совместном использовании). При вызове
AuthenticationResult ar = await authContext.AcquireTokenAsync("https://xxx", "yyyy", new Uri("ms-app://callback/")
, new AuthorizationParameters(PromptBehavior.Auto, true));
Если я использую PromptBehavior.Always, пользователь действительно должен всегда проверять подлинность себя, но он не использует кэш тогда.
Любые идеи о том, как я могу аннулировать токенше?
Заранее спасибо
Edit: решаемые
Благодаря vibronet, я был в состоянии успешно зарегистрировать пользователя путем сделать это:
authContext.TokenCache.Clear();
string requestUrl = "https://login.windows.net/common/oauth2/logout";
Task.Run(async() =>
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
var response = await client.SendAsync(request);
});
Edit2
Вы также можете используйте URL-адрес для вашего приложения/арендатора, заменив «общий» на ваш псевдоним вашего арендатора, например:
string tenantAlias = "TenantAlias.onmicrosoft.com";
string requestUrl = string.Format("https://login.windows.net/{0}/oauth2/logout", tenantAlias);
Это не работает для меня. Сетевая трассировка показывает, что ответ представляет собой страницу, заполненную JavaScript, которая, очевидно, не будет работать здесь, плюс я могу увидеть настройку ответа и не очищать файлы cookie, такие как ESTSAUTH. –