如何处理 Xamarin MobileServiceClient 中过期的身份验证令牌?
How to handle expired auth tokens in Xamarin MobileServiceClient?
我在 Xamarin.Forms 中使用客户端流身份验证,并且正在尝试找出身份验证令牌过期时的处理方式。
我的代码:
初始登录时,用户使用本机 Facebook SDK 登录,我将 access_token
传递给 MobileServiceClient 以取回经过身份验证的用户。
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token).ConfigureAwait(false);
然后我将用户的 UserId
和 MobileServiceAuthenticationToken
保存在本地设置中(使用 Xam.Plugins.Settings 插件)。
下次用户打开应用程序时,我从设置中设置用户并跳过手动登录:
if (!string.IsNullOrWhiteSpace(Settings.AuthToken) && !string.IsNullOrWhiteSpace(Settings.UserId))
{
client.CurrentUser = new MobileServiceUser(Settings.UserId);
client.CurrentUser.MobileServiceAuthenticationToken = Settings.AuthToken;
}
我的问题:
效果很好。但是,我知道 MobileServiceAuthenticationToken
已经过期了。当达到到期日期时,我的应用程序会发生什么?如何在不要求用户重新登录 Facebook 的情况下刷新令牌?我尝试了 MobileServiceClient 的 RefreshUserAsync()
方法,但出现以下异常:
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Refresh failed with a 400 Bad Request error. The identity provider does not support refresh, or the user is not logged in with sufficient permission.
有没有办法测试这个? (因为令牌从现在起 3 个月后到期。)感谢您的帮助!
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Refresh failed with a 400 Bad Request error. The identity provider does not support refresh, or the user is not logged in with sufficient permission.
由于您使用的是客户端流身份验证,因此无法使用 RefreshUserAsync()
刷新 MobileServiceAuthenticationToken
。您的移动后端未缓存用于更新身份验证令牌的相关 access_token
和 refresh_token
。
Is there a way to test this? (since the token expiration is 3 months from now.) Thanks for the help!
AFAIK,MobileServiceAuthenticationToken
默认过期时间为一小时,您可以使用 https://jwt.io/ to decode your token and check the exp
property, then use https://www.epochconverter.com/ 将时间戳转换为人类日期。
根据您的要求,您可以关注 adrian hall 的博客 Caching Tokens 并参考 IsTokenExpired
方法解码您的 authenticationToken 并检查 exp
,然后手动更新 authenticationToken。
据我了解,您可以通过两种方法实现您的目的:
你需要在手机客户端缓存facebookaccess_token
,当你手动查看authenticationToken发现过期后,你可以手动执行以下代码更新token,显式更新你的本地缓存。
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token).ConfigureAwait(false);
注意:您的 facebook access_token 有到期日期,因此如果您的 access_token 已过期,那么您需要强制用户登录 Facebook在获取新的 authenticationToken 之前再次。
或者您可以构建自定义端点以刷新 authenticationToken 并为新的 authenticationToken 显式设置较长的生命周期,您可以遵循类似的详细信息 。 注意:对于您的客户端过期处理,您需要在本地authenticationToken 即将过期之前更新令牌。
我在 Xamarin.Forms 中使用客户端流身份验证,并且正在尝试找出身份验证令牌过期时的处理方式。
我的代码:
初始登录时,用户使用本机 Facebook SDK 登录,我将 access_token
传递给 MobileServiceClient 以取回经过身份验证的用户。
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token).ConfigureAwait(false);
然后我将用户的 UserId
和 MobileServiceAuthenticationToken
保存在本地设置中(使用 Xam.Plugins.Settings 插件)。
下次用户打开应用程序时,我从设置中设置用户并跳过手动登录:
if (!string.IsNullOrWhiteSpace(Settings.AuthToken) && !string.IsNullOrWhiteSpace(Settings.UserId))
{
client.CurrentUser = new MobileServiceUser(Settings.UserId);
client.CurrentUser.MobileServiceAuthenticationToken = Settings.AuthToken;
}
我的问题:
效果很好。但是,我知道 MobileServiceAuthenticationToken
已经过期了。当达到到期日期时,我的应用程序会发生什么?如何在不要求用户重新登录 Facebook 的情况下刷新令牌?我尝试了 MobileServiceClient 的 RefreshUserAsync()
方法,但出现以下异常:
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Refresh failed with a 400 Bad Request error. The identity provider does not support refresh, or the user is not logged in with sufficient permission.
有没有办法测试这个? (因为令牌从现在起 3 个月后到期。)感谢您的帮助!
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Refresh failed with a 400 Bad Request error. The identity provider does not support refresh, or the user is not logged in with sufficient permission.
由于您使用的是客户端流身份验证,因此无法使用 RefreshUserAsync()
刷新 MobileServiceAuthenticationToken
。您的移动后端未缓存用于更新身份验证令牌的相关 access_token
和 refresh_token
。
Is there a way to test this? (since the token expiration is 3 months from now.) Thanks for the help!
AFAIK,MobileServiceAuthenticationToken
默认过期时间为一小时,您可以使用 https://jwt.io/ to decode your token and check the exp
property, then use https://www.epochconverter.com/ 将时间戳转换为人类日期。
根据您的要求,您可以关注 adrian hall 的博客 Caching Tokens 并参考 IsTokenExpired
方法解码您的 authenticationToken 并检查 exp
,然后手动更新 authenticationToken。
据我了解,您可以通过两种方法实现您的目的:
你需要在手机客户端缓存facebookaccess_token
,当你手动查看authenticationToken发现过期后,你可以手动执行以下代码更新token,显式更新你的本地缓存。
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token).ConfigureAwait(false);
注意:您的 facebook access_token 有到期日期,因此如果您的 access_token 已过期,那么您需要强制用户登录 Facebook在获取新的 authenticationToken 之前再次。
或者您可以构建自定义端点以刷新 authenticationToken 并为新的 authenticationToken 显式设置较长的生命周期,您可以遵循类似的详细信息