我有一個概念證明W8.1-app,它允許使用ADAL庫對Azure Active Directory進行用戶身份驗證。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,用戶必須始終確實驗證自己,但它不使用緩存即可。
關於如何使令牌緩存無效的任何想法?
在此先感謝
編輯:解決
感謝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
你也可以使用您的應用程序/租戶特定的網址,將「common」替換爲您的租戶的別名,如下所示:
string tenantAlias = "TenantAlias.onmicrosoft.com";
string requestUrl = string.Format("https://login.windows.net/{0}/oauth2/logout", tenantAlias);
這對我不起作用。網絡跟蹤顯示響應是一個充滿JavaScript的頁面,顯然不會在這裏運行,另外我可以看到響應設置,而不是像ESTSAUTH那樣清除cookie。 – 2016-05-19 19:14:01