2

我想在Windows Phone应用程序中使用Windows Azure移动服务实现身份验证。我遵循正式的教程和身份验证工作正常。问题是,无论何时应用程序关闭并重新开始,用户都必须输入用户名和密码。由于服务仅使用认证令牌,因此登录页面中的“记住我”选项不太可行。持久认证的Azure移动服务

Windows Azure的官方文档显示使用Live SDK与Microsoft帐户进行单点登录的可能性。 Live SDK提供了形式为string的身份验证令牌。但是,即使此令牌在约24小时内过期。而且,这仅限于Microsoft帐户。

如果我想要缓存用户的身份并启用自动登录,我有什么可能?我已经阅读了文章here。一旦令牌过期,用户仍然必须重新登录。我看过一些需要用户登录的应用程序!

回答

2

如果您使用Live SDK,用户只需登录一次。您将每次都调用Live SDK,但SDK本身会管理为您缓存令牌,并在需要时向服务器请求(大多数情况下无需用户干预) - 请参阅示例代码下面。

var liveIdClient = new LiveAuthClient(clientId); 
var liveLoginResult = await liveIdClient.LoginAsync("wl.basic wl.signin".Split()); 
if (liveLoginResult.Status == LiveConnectSessionStatus.Connected) { 
    var token = new JObject(); 
    token.Add("authenticationToken", liveLoginResult.Session.AuthenticationToken); 
    var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount, token); 
} 

请注意,如果你在模拟器上运行你的应用程序,这是可能的,如果你关闭模拟器的登录信息会丢失(我已经在过去看到了这一点)。但是,当在真实设备上运行时,或者如果让模拟器长时间打开),您只需要登录一次即可。

+0

除非您将范围限制为'wl.offline_access',否则不会授予长期令牌和刷新令牌。虽然'wl.signin'可以启用持久登录(用户不必输入凭证),但每次仍会显示权限屏幕。而且,'LoginAsync'方法实际上进入服务器并且获得令牌(观察它花费的时间!)。在Live SDK的东方,我发现解决方案的工作是调用'LiveAuthClient.InitializeAsync'并使用获得的令牌。不过,您仍然可以告诉我如何与其他提供商合作。 – akshay2000

+1

对于其他提供商,在电话中:您应该能够调用LoginAsync,并且它将“记住”用户,因为提供商存储用于登录的cookie,而用户不必重新输入他们的信用(再次,在模拟器中有时会被清除)。用户可能会短暂地看到显示的登录页面,但应该很快自行解除。您也可以使用Facebook SDK for Windows Phone(尽管我上次检查它是在Beta版中),并且登录将访问令牌传递给Azure移动服务。 – carlosfigueira