无法使用 xamarin android 获取 google Oauth2 的刷新令牌

Unable to get refresh token for google Oauth2 with xamarin android

我正在尝试在我的 xamarin android 应用程序中实施 google 身份验证。我正在使用 OAuth2Authenticator 对我的用户进行身份验证,并且在身份验证后它只会 returns access_token.How 我得到 refresh_token 这样用户就不必在每次打开应用程序时都登录吗?

我一直在使用下面的代码来验证用户

 var auth = new OAuth2Authenticator(
            clientId: "***************************.apps.googleusercontent.com",
            scope: "https://www.googleapis.com/auth/userinfo.profile",
            authorizeUrl: new Uri("https://accounts.google.com/o/oauth2/auth"),
            redirectUrl: new Uri("https://www.googleapis.com/plus/v1/people/me"),
            accessTokenUrl: newUri("https://www.googleapis.com/oauth2/v4/token"),
            clientSecret: "*********************",
            getUsernameAsync: null);


auth.Completed += async (sender, e) =>
            {
                if (!e.IsAuthenticated)
                {
                    Toast.MakeText(this, "Fail to authenticate!", ToastLength.Short).Show();
                    return;
                }
                string access_token;
                e.Account.Properties.TryGetValue("access_token", out access_token);
}

Xamarin.Auth 和 Google 似乎存在一些问题,因为 Google 不再建议使用应用程序内置的 WebView 进行登录,而应该使用设备浏览器。请参阅 Google 的相关文章:

https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

如果您确实使用应用程序内置的 WebView,就像 Xamarin.Auth 默认情况下那样,您将不会获得刷新令牌(根据上面链接的文章):

In contrast, the outdated method of using embedded browsers for OAuth means a user must sign-in to Google each time, instead of using the existing logged-in session from the device.

Xamarin 身份验证不支持 refresh_token

https://github.com/xamarin/Xamarin.Auth/pull/79

我实现了一个继承的 class 你可以在我的 gist

上找到

它适用于我的自定义身份提供者(refresh_token 在参数中返回)。 你可以试试我的解决方案。

嗨! 刘易斯