サービス アカウントは Coordinate API では使用できません。[これは、Coordinate API では認証済みの API ユーザーに Coordinate ライセンスが必要ですが、Coordinate ライセンスをサービス アカウントに関連付けることができないためです]
代わりに Web サーバー フローを使用できます。以下のサンプルを参照してください。
「TO UPDATE」を含むコメントがある以下のコードを必ず更新してください。
using System;
using System.Diagnostics;
using System.Collections.Generic;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Coordinate.v1;
using Google.Apis.Coordinate.v1.Data;
namespace Google.Apis.Samples.CoordinateOAuth2
{
/// <summary>
/// This sample demonstrates the simplest use case for an OAuth2 service.
/// The schema provided here can be applied to every request requiring authentication.
/// </summary>
public class ProgramWebServer
{
public static void Main (string[] args)
{
// TO UPDATE, can be found in the Coordinate application URL
String TEAM_ID = "jskdQ--xKjFiFqLO-IpIlg";
// Register the authenticator.
var provider = new WebServerClient (GoogleAuthenticationServer.Description);
// TO UPDATE, can be found in the APIs Console.
provider.ClientIdentifier = "335858260352.apps.googleusercontent.com";
// TO UPDATE, can be found in the APIs Console.
provider.ClientSecret = "yAMx-sR[truncated]fX9ghtPRI";
var auth = new OAuth2Authenticator<WebServerClient> (provider, GetAuthorization);
// Create the service.
var service = new CoordinateService(new BaseClientService.Initializer()
{
Authenticator = auth
});
//Create a Job Resource for optional parameters https://developers.google.com/coordinate/v1/jobs#resource
Job jobBody = new Job ();
jobBody.Kind = "Coordinate#job";
jobBody.State = new JobState ();
jobBody.State.Kind = "coordinate#jobState";
jobBody.State.Assignee = "user@example.com";
//Create the Job
JobsResource.InsertRequest ins = service.Jobs.Insert (jobBody, TEAM_ID, "My Home", "51", "0", "Created this Job with the .Net Client Library");
Job results = ins.Fetch ();
//Display the response
Console.WriteLine ("Job ID:");
Console.WriteLine (results.Id.ToString ());
Console.WriteLine ("Press any Key to Continue");
Console.ReadKey ();
}
private static IAuthorizationState GetAuthorization (WebServerClient client)
{
IAuthorizationState state = new AuthorizationState (new[] { "https://www.googleapis.com/auth/coordinate" });
// The refresh token has already been retrieved offline
// In a real-world application, this has to be stored securely, since this token
// gives access to all user data on the Coordinate scope, for the user who accepted the OAuth2 flow
// TO UPDATE (see below the sample for instructions)
state.RefreshToken = "1/0KuRg-fh9yO[truncated]yNVQcXcVYlfXg";
return state;
}
}
}
更新トークンは、OAuth2 Playground を使用して取得できます。
- API コンソールで、OAuth プレイグラウンド URL https://developers.google.com/oauthplaygroundを承認済みリダイレクト URI として追加します (以下の OAuth プレイグラウンドで更新トークンを取得するときに必要になります)。
- API ユーザーが認証されているブラウザ セッションで、OAuth Playground に移動します (このユーザーには Coordinate ライセンスが必要です)。必ず独自の OAuth2 クライアント ID を提供してください ([設定] > [独自の OAuth 資格情報を使用])。そうしないと、リフレッシュ トークンは OAuth2 Playground の内部 OAuth2 クライアント ID に関連付けられ、アクセス トークンを取得するために独自のクライアント ID でリフレッシュ トークンを使用する場合に拒否されます。
- スコープhttps://www.googleapis.com/auth/coordinateを使用しますステップ 1 で [API を認証する] をクリックします ステップ 2 で [トークンの交換認証コード] をクリックします</li>
- コードに更新トークンをコピーします。安全に保管してください。
- この更新トークンには有効期限がないため、アプリは認証されたままになります。