Azure AD身份验证会记住所选帐户。如何阻止这一点

时间:2015-11-02 11:32:46

标签: c# azure azure-active-directory

要使用AzureAD进行身份验证,我将后续代码放在控制台应用程序中

private static async Task<string> GetAuthTokenAsync(string tendent,string AppIdUri , string ClientID)
    {
        /*
         <add key="ida:Audience" value="https://mehler.ws/ToDoWebApi" />
<add key="ida:ClientID" value="f0e91727-3edd-4b00-9630-591166a74e4b" />
        */
        var authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", tendent));
        AuthenticationResult result = authContext.AcquireToken(AppIdUri, ClientID , new Uri(Settings.Default.WebApiReplyAdress));

        return result.CreateAuthorizationHeader();
    }

方法AcquireToken显示一个屏幕,要求我输入我的凭据。

我意外地选择了我在Windows 10中登录的帐户。现在,屏幕不再显示应用程序自动使用我的Windows 10帐户。有谁知道如何解决这个问题,以便屏幕再次出现?

3 个答案:

答案 0 :(得分:1)

缓存令牌以减轻应用中的复杂性。如果您希望用户重新登录,则需要清除令牌缓存...通常您会设置注销功能。

有关令牌缓存的更多信息:http://www.cloudidentity.com/blog/2013/10/01/getting-acquainted-with-adals-token-cache/

如何退出:

authContext.TokenCache.Clear();
string requestUrl = "https://login.microsoftonline.com/{0}/oauth2/logout?post_logout_redirect_uri={1}";
Task.Run(async () =>
{
    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
    var response = await client.SendAsync(request);
});
  • {0} - Azure Active Directory的完全限定名称,例如 yourad.onmicrosoft.com或租户ID。
  • {1} - 必须重定向用户的应用程序的URL 注销完成后返回。这应该是正确的URL 编码。

答案 1 :(得分:1)

一种简单的方法是传递给AcquireToken PromptBehavior.Always,这是一个重载。这将导致ADAL忽略缓存并将要求服务提供干净的提示

答案 2 :(得分:0)

我自己找到一个非常简单的解决方案,一旦清除缓存。 删除Internet Explorer / Edge中的Cookie; - )

非常感谢Answers热门实施正确的登出代码和强制提示登录。