Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有持久身份验证的Azure移动服务_C#_Authentication_Azure_Windows Phone 8_Azure Mobile Services - Fatal编程技术网

C# 具有持久身份验证的Azure移动服务

C# 具有持久身份验证的Azure移动服务,c#,authentication,azure,windows-phone-8,azure-mobile-services,C#,Authentication,Azure,Windows Phone 8,Azure Mobile Services,我正在尝试在我的Windows Phone应用程序中使用Windows Azure移动服务实施身份验证。我遵循了官方教程,认证工作正常。问题是,无论何时关闭并再次启动应用程序,用户都必须输入用户名和密码。由于服务仅使用身份验证令牌,因此登录页面上的“记住我”选项不太可能起作用 Microsoft Azure的官方文档显示了使用Live SDK使用Microsoft帐户进行单点登录的可能性。Live SDK以字符串的形式提供身份验证令牌。然而,即使这个代币也会在24小时后过期。此外,这仅限于Mic

我正在尝试在我的Windows Phone应用程序中使用Windows Azure移动服务实施身份验证。我遵循了官方教程,认证工作正常。问题是,无论何时关闭并再次启动应用程序,用户都必须输入用户名和密码。由于服务仅使用身份验证令牌,因此登录页面上的“记住我”选项不太可能起作用

Microsoft Azure的官方文档显示了使用Live SDK使用Microsoft帐户进行单点登录的可能性。Live SDK以
字符串的形式提供身份验证令牌。然而,即使这个代币也会在24小时后过期。此外,这仅限于Microsoft帐户


如果我想缓存用户的身份并启用自动登录,我的可能性是什么?我已经看过这篇文章了。一旦令牌过期,用户仍必须再次登录。我见过一些只需要用户登录一次的应用程序

如果使用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);
}

请注意,如果您在模拟器上运行应用程序,那么如果您关闭模拟器,登录信息可能会丢失(我在过去见过这种情况)。但是,当在真实设备上运行时,或者如果您让模拟器长时间处于打开状态),您应该只需要登录一次。

长期令牌和刷新令牌甚至不被授予,除非您选择
wl.offline\u访问
。尽管
wl.signin
启用持久登录(用户不必输入凭据),但每次仍会显示权限屏幕。另外,
LoginAsync
方法实际上会进入服务器并获取令牌(请观察所需的时间!)。在east for Live SDK中,我发现可行的解决方案是调用
LiveAuthClient.InitializeAsync
并使用获得的令牌。但是,您仍然可以告诉我如何与其他提供商合作。对于其他提供商,在电话中:您应该能够呼叫
LoginAsync
,并且它将“记住”用户,因为提供商存储用于登录的cookie,而用户无需重新输入他们的凭据(同样,在模拟器中,有时这些cookie会被清除)。用户可能会短暂地看到登录页面显示出来,但它应该很快自行关闭。您还可以使用适用于Windows Phone的Facebook SDK(不过,上次我检查它是在测试版中),然后登录并将访问令牌传递给Azure移动服务。