【问题标题】:Using Xamarin Essentials WebAuthenticator to get Google Id_token使用 Xamarin Essentials WebAuthenticator 获取 Google Id_token
【发布时间】:2022-01-24 08:15:42
【问题描述】:

我正在使用 Xamarin Essentials 作为我正在开发的 Xamarin Forms 应用程序的一部分。 我已将它集成到我的 aspnet.core 后端,它工作正常。

但是,当我使用 google 和 facebook 登录时,我得到了一个 accesstoken,但如果是 google 登录,我需要 id_token 而不是 accesstoken。

我在启动时查看了“AddAuthentication”部分的“AddJwtBearer”方法,但是当我在控制器中使用“AuthenticateAsync”方法时,我无法使其工作。

如何做到这一点? 后端基于此示例中的代码: https://github.com/xamarin/Essentials/blob/develop/Samples/Sample.Server.WebAuthenticator/Controllers/MobileAuthController.cs

【问题讨论】:

  • 加油!有人吗?
  • 我的回答对你有帮助吗?
  • 嗨@AmjadSaab。我今天回家后会测试它 - 谢谢你的建议。我很确定在使用 AuthenticateAsync 方法时不会返回 idToken,但我会再次检查。
  • 当然还要注意需要解析的 Id 令牌,也许这就是你无法访问它的原因\

标签: asp.net-core xamarin.forms google-signin xamarin.essentials webauthenticator


【解决方案1】:

尝试从这里获取它:

var auth = await Request.HttpContext.AuthenticateAsync(scheme);
var idtoken = auth.Properties.GetTokenValue("id_token");

 string refreshToken = await HttpContext.GetTokenAsync("id_token"); 

检查这个类

 public class WebAuth
    {
        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);
        }
    
       

        async Task OnAuthenticate(string scheme)
        {
            try
            {
                scheme = "Facebook";
                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;
            }
        }
    }

【讨论】:

猜你喜欢
  • 2021-04-29
  • 2022-06-15
  • 1970-01-01
  • 2018-08-25
  • 2023-03-27
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多