Google Linux 无头服务器 (.NET) 上的 OAuth2 授权
Google OAuth2 Authorization On Linux Headless Server (.NET)
我很好奇 Linux 无头服务器上的身份验证如何在没有 C# 中的互联网浏览器的情况下为他们的 Sheetsv4 API 工作。他们在入门页面上的所有代码片段都引用了 GoogleWebAuthorizationBroker,如果没有网络浏览器,它就无法工作。我看到了对 GoogleAuthorizationCodeFlow 的引用,但我不确定这是否是我正在寻找的 - 也不确定您打算如何使用它。我当前的代码如下-
UserCredential Credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(Stream).Secrets,
new string[1] { SheetsService.Scope.SpreadsheetsReadonly },
"user",
CancellationToken.None,
new FileDataStore(GreetFurConfiguration.TokenFile, true)
).Result;
我想要的是生成 link 并从那里能够将令牌粘贴到控制台中,就像其他 Google APIs 处理我以前使用过的这种身份验证(Go,NodeJS)并且似乎运行良好。
如果有任何更好的方法来处理此身份验证,尽管它更适合 .NET 工作流,那也是合适的。尽管无法访问主机上的 Web 浏览器,但我无法找到任何关于如何在我的生活中获得 OAuth2 令牌的示例。
但是,我找不到任何关于如何使用它的文档 class。
GoogleWebAuthorizationBroker.AuthorizeAsync
允许您发送您想要的代码接收器 您正在寻找的是 PromptCodeReceiver
。
private const string PathToCredentialFile = "/home/linda/development/creds/client.json";
static async Task Main(string[] args)
{
var scope = new[] {AnalyticsReportingService.Scope.AnalyticsReadonly};
var credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
await using (var stream = new FileStream(PathToCredentialFile, FileMode.Open, FileAccess.Read))
{
// Requesting Authentication or loading previously stored authentication for userName
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scope,
"userName",
CancellationToken.None,
new FileDataStore(credPath, true),
new PromptCodeReceiver()).Result;
Console.WriteLine($"AccessToken: {credential.Token.AccessToken}");
}
输出:
Please visit the following URL in a web browser, then enter the code shown after authorization:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=1XXXXX.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics.readonly
Please enter code:
4/1AY0e-g6L3ASB0lEhWNkh4lDc4nl5k0xV177o38taWFzEzKBv3H24ZC4zQAM
Access toekn: ya29.a0AfH6SMB8ZhpZJgKkpMfbiflxeOF_o6Gzs6fxIuPI25Vewbp7NgVAfJp8EX6K5zgielRrYaSFjqwKIY8MoCuCDbPeF5-2w6_WRnauWqtpleqk2zjqmkHgpfNwbpO8n7VmHVSF9Mgn3YOZRl
我很好奇 Linux 无头服务器上的身份验证如何在没有 C# 中的互联网浏览器的情况下为他们的 Sheetsv4 API 工作。他们在入门页面上的所有代码片段都引用了 GoogleWebAuthorizationBroker,如果没有网络浏览器,它就无法工作。我看到了对 GoogleAuthorizationCodeFlow 的引用,但我不确定这是否是我正在寻找的 - 也不确定您打算如何使用它。我当前的代码如下-
UserCredential Credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(Stream).Secrets,
new string[1] { SheetsService.Scope.SpreadsheetsReadonly },
"user",
CancellationToken.None,
new FileDataStore(GreetFurConfiguration.TokenFile, true)
).Result;
我想要的是生成 link 并从那里能够将令牌粘贴到控制台中,就像其他 Google APIs 处理我以前使用过的这种身份验证(Go,NodeJS)并且似乎运行良好。
如果有任何更好的方法来处理此身份验证,尽管它更适合 .NET 工作流,那也是合适的。尽管无法访问主机上的 Web 浏览器,但我无法找到任何关于如何在我的生活中获得 OAuth2 令牌的示例。
但是,我找不到任何关于如何使用它的文档 class。
GoogleWebAuthorizationBroker.AuthorizeAsync
允许您发送您想要的代码接收器 您正在寻找的是 PromptCodeReceiver
。
private const string PathToCredentialFile = "/home/linda/development/creds/client.json";
static async Task Main(string[] args)
{
var scope = new[] {AnalyticsReportingService.Scope.AnalyticsReadonly};
var credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
await using (var stream = new FileStream(PathToCredentialFile, FileMode.Open, FileAccess.Read))
{
// Requesting Authentication or loading previously stored authentication for userName
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
scope,
"userName",
CancellationToken.None,
new FileDataStore(credPath, true),
new PromptCodeReceiver()).Result;
Console.WriteLine($"AccessToken: {credential.Token.AccessToken}");
}
输出:
Please visit the following URL in a web browser, then enter the code shown after authorization:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id=1XXXXX.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics.readonly
Please enter code:
4/1AY0e-g6L3ASB0lEhWNkh4lDc4nl5k0xV177o38taWFzEzKBv3H24ZC4zQAM
Access toekn: ya29.a0AfH6SMB8ZhpZJgKkpMfbiflxeOF_o6Gzs6fxIuPI25Vewbp7NgVAfJp8EX6K5zgielRrYaSFjqwKIY8MoCuCDbPeF5-2w6_WRnauWqtpleqk2zjqmkHgpfNwbpO8n7VmHVSF9Mgn3YOZRl