У запроса Google.Apis.Requests.RequestError недостаточно областей проверки подлинности.[403] в GCP для API управления Firebase - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать новый проект, используя resourcemanager.projects.create, но получил ошибку вроде: (

Google.Apis.Requests.RequestError
Request had insufficient authentication scopes. [403]
Errors [
    Message[Request had insufficient authentication scopes.] Location[ - ] Reason[forbidden] Domain[global]
]

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно. Вот мой код:

private async void GoogleClick(object sender, RoutedEventArgs e)
{
    try
    {
        var cr = new PromptCodeReceiver();

        var result = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets { ClientId = GoogleClientId,ClientSecret = GoogleSecretKey },
            new[] { "email", "profile" },
                "user",
                 CancellationToken.None);

        if (result.Token.IsExpired(SystemClock.Default))
        {
            await result.RefreshTokenAsync(CancellationToken.None);
        }

        CloudResourceManagerService cloudResourceManagerService = new CloudResourceManagerService(new BaseClientService.Initializer
        {
            HttpClientInitializer = GetCredential(result.Token.AccessToken, FirebaseAuthType.Google),
            ApplicationName = "Kapiling",
            //ApiKey = "apikey"
        });

        // TODO: Assign values to desired properties of `requestBody`:
        Data.Project requestBody = new Data.Project();
        requestBody.Name = "TESTING";
        requestBody.ProjectNumber = 415104041262;
        requestBody.ProjectId = "tokyo-rain-123";
        requestBody.CreateTime = "2014-10-02T15:01:23.045123456Z";

        ProjectsResource.CreateRequest request = cloudResourceManagerService.Projects.Create(requestBody);

}

Я пытаюсь получить доступ с помощью общедоступного статического GoogleCredential FromAccessToken (строка accessToken, IAccessMethod accessMethod = null); метод

public static GoogleCredential GetCredential(string accessToken, FirebaseAuthType authType)
    {
        GoogleCredential credential = GoogleCredential.FromAccessToken(accessToken, null);
        return credential;
    }

Спасибо всем, кто мне помог, я решил этовопросы. Еще раз спасибо.:)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Измените свой код на GetCredential().Примечание: я не уверен, что вы пытаетесь сделать с FirebaseAuthType, поэтому я оставил authType в качестве неиспользуемого параметра.

public static GoogleCredential GetCredential(string accessToken, FirebaseAuthType authType)
    {
        GoogleCredential credential = GoogleCredential.FromAccessToken(accessToken, null);
// The following line is no longer needed
//      credential = credential.CreateScoped("https://www.googleapis.com/auth/cloud-platform");
        return credential;
    }

[РЕДАКТИРОВАТЬ]: Дополнительный код, который нужно изменить из-за комментария createScopedRequired = false

Вы получили это сообщение, потому что вы уже прошли аутентификацию с областями.Для изменения границ требуется другое разрешение.В этом случае запросите правильные области применения.Обратите внимание, что вам не нужны другие области (электронная почта и профиль).Поместите их позже, если вы это сделаете.

string[] scopes = new string[] { "https://www.googleapis.com/auth/cloud-platform" };

var result = GoogleWebAuthorizationBroker.AuthorizeAsync(
    new ClientSecrets {
        ClientId = GoogleClientId,
        ClientSecret = GoogleSecretKey },
    scopes,
    "user",
    CancellationToken.None).Result;
0 голосов
/ 14 декабря 2018

При просмотре документации GCP кажется, что вам (также) нужна область действия https://www.googleapis.com/auth/cloud-platform.Смотри https://cloud.google.com/resource-manager/docs/authorizing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...