LoginSignup
3
3

More than 5 years have passed since last update.

SpreadsheetServiceの認証方法をClientからOAuth2に切り替える

Posted at

GoogleAPIのClientログインがサポート終了したため、これまでのソースで認証しようとすると下記のエラーが出てしまいます。

Execution of authentication request returned unexpected result: 404

これまでのソース

program.cs
var service = new SpreadsheetsService("ApplicationName");
service.setUserCredentials("hoge@gmail.com", "password");

//対象のスプレッドシートを検索
var query = new SpreadsheetQuery();
query.Title = "spreadsheetName";

var feed = service.Query(query);
var spreadsheet = (SpreadsheetEntry)feed.Entries[0];

OAuth2認証

具体的なソースは下記参照。
NuGetで「Google.Apis.Auth」を追加しておく必要があります。

下記ソース内に登場するClientId、ClientSecretはデベロッパーコンソールで取得します。
https://console.developers.google.com/project

具体的には、左メニューのAPIs&auth → Credentials → OAuth →Create new Client IDをクリックし、
Installed application、Otherを選択してOKをクリックすると作成されます。

このコンソールアプリを実行すると、ブラウザが立ち上がって認証を求められるので、認証することでAPIにアクセスできるようになります。

直したソース

program.cs

var clientId = "ClientId";
var clientSecret = "ClientSecret";

var userCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    new ClientSecrets
    {
        ClientId = clientId,
        ClientSecret = clientSecret
    },
    new[] 
    {
        "https://spreadsheets.google.com/feeds" 
    },
    "hoge@gmail.com",
    CancellationToken.None,
    new FileDataStore("folderName")
    ).Result;

var auth = new OAuth2Parameters
    {
        ClientId = clientId,
        ClientSecret = clientSecret,
        RedirectUri = "urn:ietf:wg:oauth:2.0:oob",
        Scope = "https://spreadsheets.google.com/feeds",
        AccessToken = userCredential.Token.AccessToken,
        RefreshToken = userCredential.Token.RefreshToken,
        TokenType = userCredential.Token.TokenType,
    };

var requestFactory = new GOAuth2RequestFactory(null, "ApplicationName", auth);
var service = new SpreadsheetsService("ApplicationName")
    {
        Credentials = new GDataCredentials(userCredential.Token.TokenType + " " + userCredential.Token.AccessToken),
        RequestFactory = requestFactory
    };

//更新対象のスプレッドシートを検索
var query = new SpreadsheetQuery();
query.Title = "spreadsheetName";

var feed = service.Query(query);
var spreadsheet = (SpreadsheetEntry)feed.Entries[0];

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3