【问题标题】:Xamarin forms WebAuthenticator usageXamarin 表单 WebAuthenticator 使用
【发布时间】:2021-04-29 08:27:34
【问题描述】:

我正在尝试为 Xamarin Forms App 实施 Facebook Auth。 我正在做本教程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;
            }
        }
    }

我还有一些后端代码。所有这一切都很好,我得到了访问令牌、用户 ID 等等。 但我还有一些问题。

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

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

【问题讨论】:

    标签: c# authentication xamarin.forms social-authentication


    【解决方案1】:

    作为用户,您不希望每次使用该应用时都必须登录。幸运的是,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;
      }
    }
    

    【讨论】:

    • 我还认为应该在服务器端使用 MSAL。你的意思是我也应该在我的 xamarin 客户端应用程序中使用它吗?
    • @Gleb _pca 是PublicClientApplication,您可以参考this 及其sample
    • 是否可以在没有 microsoft 帐户但使用 facebook 和其他社交网络的情况下使用 MSAL?
    • @Gleb 我想你在找Azure Active Directory B2C
    猜你喜欢
    • 2022-06-15
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多