无法使用 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 在参数中返回)。
你可以试试我的解决方案。
嗨!
刘易斯
我正在尝试在我的 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 在参数中返回)。 你可以试试我的解决方案。
嗨! 刘易斯