我正在尝试实现Xamarin表单应用程序的Facebook身份验证。我所做的一切都像本教程中的https://docs.microsoft.com/en-us/xamarin/essentials/web-authenticator?tabs=android,所以我使用服务器端身份验证。以下是我的移动应用代码:
public class WebAuthViewModel:ObservableObject
{
private const string AuthenticationUrl = "https://myapp.com/mobileauth/";
private string _accessToken = "";
private bool _isAuthenticated = false;
public string AuthToken
{
get => _accessToken;
set => SetProperty(ref _accessToken, value);
}
public ICommand FacebookCommand { get; }
public WebAuthViewModel()
{
FacebookCommand = new Command(async()=>await OnAuthenticate("Facebook"));
}
async Task OnAuthenticate(string scheme)
{
try
{
WebAuthenticatorResult result = null;
var authUrl = new Uri(AuthenticationUrl + scheme);
var callbackUrl = new Uri("myapp://");
result = await WebAuthenticator.AuthenticateAsync(authUrl, callbackUrl);
AuthToken = string.Empty;
if (result.Properties.TryGetValue("name", out var name) && !string.IsNullOrEmpty(name))
{
AuthToken += $"Name: {name}{Environment.NewLine}";
}
if (result.Properties.TryGetValue("email", out var email) && !string.IsNullOrEmpty(email))
{
AuthToken += $"Email: {email}{Environment.NewLine}";
}
AuthToken += result?.AccessToken ?? result?.IdToken;
IsAuthenticated = true;
}
catch (Exception ex)
{
AuthToken = string.Empty;
}
}
}我还有一些后端代码。所有这些都运行得很好,我得到了访问令牌、UserId等等。但我还有一些问题要问。
验证登录是否仍然有效的正确方法是什么?我应该如何授权app操作?我该如何实现注销呢?
我将感谢您的建议或链接。
发布于 2021-01-26 14:23:21
作为用户,您不希望每次使用该应用程序时都必须登录。幸运的是,MSAL已经缓存了您的授权,如果它仍然经过valid.When正确身份验证,则可以静默登录。我们将收到一个访问令牌,随后可以使用该令牌来查询受MSAL保护的其他。
注销是非常简单的。我们检查MSAL为我们在本地缓存的所有可用帐户,并将它们注销。我们还清除了登录时存储在安全存储中的访问令牌。
public async Task<bool> SignOutAsync()
{
try
{
var accounts = await _pca.GetAccountsAsync();
// Go through all accounts and remove them.
while (accounts.Any())
{
await _pca.RemoveAsync(accounts.FirstOrDefault());
accounts = await _pca.GetAccountsAsync();
}
// Clear our access token from secure storage.
SecureStorage.Remove("AccessToken");
return true;
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
return false;
}
}https://stackoverflow.com/questions/65886362
复制相似问题