using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
来自here的这段代码处理应用程序的身份验证并保存用户凭据文件。
但是,它使用浏览器。我在某处读到,谷歌不再支持检查原始用户名&密码,而是让用户通过浏览器登录。
我可以不在我的C#应用程序中嵌入浏览器,并在此处完成身份验证,而不是烦人地打开浏览器吗?
答案 0 :(得分:1)
OAuth是授权协议,而不是身份验证机制。 Google的身份验证始终在浏览器中完成,嵌入式浏览器不再支持。见https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html
有一些解决方案可以避免每次都通过浏览器提示用户。具体来说,您可以使用服务帐户(创建新的Google帐户作为代理 - 请参阅https://developers.google.com/identity/protocols/OAuth2ServiceAccount)或请求并保存刷新令牌(类似于保存用户名/密码,但特定于需要Google服务,例如云端硬盘 - 请参阅How do I authorise an app (web or installed) without user intervention? (canonical ?))。