Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Oauth error: At least one client secrets (Installed or Web) should be set

I'm using Google's Oauth 2.0 to upload videos to Youtube via our server. My client ID is a "service account". I downloaded the json key and added it to my solution.

Here is the relevant code:

 private async Task Run(string filePath)
        {
            UserCredential credential;
            var keyUrl = System.Web.HttpContext.Current.Server.MapPath("~/content/oauth_key.json");
            using (var stream = new FileStream(keyUrl, FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    // This OAuth 2.0 access scope allows an application to upload files to the
                    // authenticated user's YouTube channel, but doesn't allow other types of access.
                    new[] { YouTubeService.Scope.YoutubeUpload },
                    "user",
                    CancellationToken.None
                );
            }

            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
            });

When I run it, I get this error: At least one client secrets (Installed or Web) should be set.

However, in my json there is no "client secret":

{
  "private_key_id": "9d98c06b3e730070806dcf8227578efd0ba9989b",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIICdQIBADANBgkqhk etc,
  "client_email": "546239405652-8igo05a5m8cutggehk3rk3hspjfm3t04@developer.gserviceaccount.com",
  "client_id": "546239405652-8igo05a5m8cutggehk3rk3hspjfm3t04.apps.googleusercontent.com",
  "type": "service_account"
}

so I assume I overlooked something. Maybe I can't use the "service account" ? don't know...

like image 243
David Avatar asked Mar 03 '15 06:03

David


People also ask

How do I get Google OAuth client secret?

Get a client ID and client secret On the Credentials page, select Create credentials, then select OAuth client ID. Under Application type, choose Web application. Click Create. On the page that appears, take note of the client ID and client secret.

What is client secret Google API?

The Google APIs client library for . NET uses client_secrets. json files for storing the client_id , client_secret , and other OAuth 2.0 parameters. A client_secrets.json file is a JSON formatted file containing the client ID, client secret, and other OAuth 2.0 parameters.


1 Answers

The solution that uses json file is quite similar.

Here is sample that create VisionService using GoogleCredential object created from json file with ServiceAccountCredential.

GoogleCredential credential;
using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
    credential = GoogleCredential.FromStream(stream)
        .CreateScoped(VisionService.Scope.CloudPlatform);
}

var service = new VisionService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "my-app-name",
});

this sample require two NuGet packages:

Google.Apis.Vision.v1  
Google.Apis.Oauth2.v2
like image 88
Sergey Tihon Avatar answered Oct 12 '22 16:10

Sergey Tihon