我在网上读了很多帖子后迷失了方向,需要一些建议。我在我的Xamarin.Forms项目中使用ADAL 3.17.1。现在,使用ADAL3时,刷新令牌和AcquireTokenByRefreshTokenAsync不再可用,并由内部处理。但是这个刷新令牌只存储在内存中,当IOS应用程序在后台运行时,或者当应用程序关闭并重新打开时,用户需要再次登录。
是否可以让用户在早上登录一次,并将令牌保留8-10小时?并且在接下来的8-10小时内应用程序启动或恢复时不要求登录?我在那上面找不到帖子。所有帖子都使用刷新令牌...
下面是在IOS中运行的Authenticator类中的代码:
public class Authenticator_iOS : IAuthenticator
{
public async Task<MultipleAuthResult> Authenticate(string authority, string resource, string resource2, string clientId, string returnUri)
{
MultipleAuthResult multipleAuth = new MultipleAuthResult();
var authContext = new AuthenticationContext(authority, new CustomTokenCache());
if (authContext.TokenCache.ReadItems().Any())
authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
var controller = UIApplication.SharedApplication.KeyWindow.RootViewController;
var uri = new Uri(returnUri);
var platformParams = new PlatformParameters(controller);
platformParams.PromptBehavior = PromptBehavior.Auto;
try
{
multipleAuth.ResultBackEnd = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); // Token for backend
multipleAuth.ResultGraph = await authContext.AcquireTokenAsync(resource2, clientId, uri, platformParams); // Token for Graph query
}
catch (Exception e)
{
return null;
}
return multipleAuth;
}
public void SingOut(string authority)
{
//Token
var authContext = new AuthenticationContext(authority);
if (authContext.TokenCache.ReadItems().Any())
{
authContext.TokenCache.Clear();
}
//Webview cookie
NSHttpCookieStorage CookieStorage = NSHttpCookieStorage.SharedStorage;
foreach (var cookie in CookieStorage.Cookies)
{
CookieStorage.DeleteCookie(cookie);
}
}
}
发布于 2018-01-27 03:58:44
看起来你每次触发你的方法时都会初始化一个新的缓存实例。
var authContext = new AuthenticationContext(authority, new CustomTokenCache());这使得这个检查变得没有意义:
if (authContext.TokenCache.ReadItems().Any())只需完全删除初始化CustomTokenCache,我有一种感觉,它将在默认情况下保留。改为执行以下操作:
var authContext = new AuthenticationContext(commonAuthority);
if (authContext.TokenCache.ReadItems().Count() > 0)
{
authContext = new AuthenticationContext(
authContext.TokenCache.ReadItems().First().Authority);
}https://stackoverflow.com/questions/47102890
复制相似问题