在阅读网上的很多帖子后我迷失了,需要一些建议。 我在我的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);
}
}
}
&#13;
答案 0 :(得分:0)
看起来您每次触发方法时都会初始化一个新的缓存实例。
class ProfileForm extends React.Component {
constructor(props, context) {
super(props, context);
}
render() {
return (
<div>
<TextInput name={'firstname'} label={'First name: '} value={this.props.user.firstname} onChange={this.props.onChange}/>
<TextInput name={'lastname'} label={'Last name: '} value={this.props.user.lastname} onChange={this.props.onChange}/>
<TextInput name={'phone'} label={'Phone: '} value={this.props.user.phone} onChange={this.props.onChange}/>
<div>
As who you want to be presented on a map:
<CheckBoxInput name={"type"} label={"Driver"} value={Constants.TYPE_DRIVER} checked={!!this.props.markers.driver} onChange={this.props.onCheckBoxChange}/>
<CheckBoxInput name={"type"} label={"Passenger"} value={Constants.TYPE_PASSENGER} checked={!!this.props.markers.passenger} onChange={this.props.onCheckBoxChange}/>
</div>
</div>
);
}
}
这使得这个检查没有实际意义:
var authContext = new AuthenticationContext(authority, new CustomTokenCache());
完全删除初始化if (authContext.TokenCache.ReadItems().Any())
,我觉得默认情况下它会持续存在。
这样做:
CustomTokenCache