웹상의 많은 게시물을 읽은 후에 분실되었으며 몇 가지 조언이 필요합니다. Xamarin.Forms 프로젝트에서 ADAL 3.17.1을 사용합니다. 이제 ADAL3에서는 새로 고침 토큰과 AcquireTokenByRefreshTokenAsync를 더 이상 사용할 수 없으며 내부적으로 처리됩니다. 하지만 메모리에 저장된이 새로 고침 토큰은 IOS 앱이 백그라운드에서 실행되거나 응용 프로그램이 닫히고 다시 열릴 때 다시 로그온해야합니다.ADAL 3 토큰 지속성
아침에 사용자 로그를 기록하고 토큰을 8-10 시간 동안 유효하게 유지할 수 있습니까? 다음 8-10 시간 내에 앱을 시작하거나 다시 시작할 때 로그인하지 않으시겠습니까? 나는 그것에 대한 게시물을 찾을 수 없습니다. 새 캐시를 초기화하는 것처럼
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);
}
}
}
iOS에는 격리 된 저장소가 있으므로 Xamarin 클래스에서 사용할 수 있어야합니다. 토큰을 얻는 메소드에는 과부하가있어 토큰 캐시 객체를 전달할 수 있습니다 (먼저 격리 저장소에서 작성 및 유지). 토큰은 1 시간 동안 유효합니다. 다음에'.AcquireTokenAsync() '를 호출하면 캐시에서 새로 고침 토큰을 사용하여 UI 토큰없이 새로운 토큰을 얻고 토큰을 새로 고칩니다. – evilSnobu
답장을 보내 주셔서 감사합니다. ADAL3 필요와 같은 Authenticator 클래스를 사용합니다. UWP와 Android에서 "캐시"기능이 잘 작동하지만 IOS는 계속 로그인을 요구합니다. 사용하는 코드로 게시물을 업데이트하십시오. –