Xamarin表单WebAuthenticator的使用



我试图实现Facebook认证Xamarin表单应用程序。我做的一切都像本教程https://learn.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等等。但我仍有一些问题。

验证登录是否仍然有效的正确方法是什么?我应该如何授权应用程序操作?我如何实现Logout?

如有建议或链接,我将不胜感激。

作为用户,您不希望每次使用应用程序都必须登录。幸运的是,MSAL已经缓存您的授权,如果仍然有效,可以静默地登录您。通过正确的身份验证后,我们收到一个访问令牌,我们可以随后使用它来查询由MSAL保护的其他api。.

签出是相当直接的。我们遍历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;
}
}

相关内容

  • 没有找到相关文章

最新更新