首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin forms WebAuthenticator用法

Xamarin forms WebAuthenticator用法
EN

Stack Overflow用户
提问于 2021-01-25 22:08:21
回答 1查看 368关注 0票数 0

我正在尝试实现Xamarin表单应用程序的Facebook身份验证。我所做的一切都像本教程中的https://docs.microsoft.com/en-us/xamarin/essentials/web-authenticator?tabs=android,所以我使用服务器端身份验证。以下是我的移动应用代码:

代码语言:javascript
复制
   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操作?我该如何实现注销呢?

我将感谢您的建议或链接。

EN

回答 1

Stack Overflow用户

发布于 2021-01-26 14:23:21

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

注销是非常简单的。我们检查MSAL为我们在本地缓存的所有可用帐户,并将它们注销。我们还清除了登录时存储在安全存储中的访问令牌。

代码语言:javascript
复制
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;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65886362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档