要使用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帐户。有谁知道如何解决这个问题,以便屏幕再次出现?
答案 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);
});
答案 1 :(得分:1)
一种简单的方法是传递给AcquireToken PromptBehavior.Always,这是一个重载。这将导致ADAL忽略缓存并将要求服务提供干净的提示
答案 2 :(得分:0)
我自己找到一个非常简单的解决方案,一旦清除缓存。 删除Internet Explorer / Edge中的Cookie; - )
非常感谢Answers热门实施正确的登出代码和强制提示登录。