Tinkoff / invest-api-csharp-sdk

51 stars 19 forks source link

Ошибка Grpc.Core.RpcException: Unauthenticated #9

Closed kamilzakiev closed 2 years ago

kamilzakiev commented 2 years ago
  1. Создал новый VS2022 Solution, подключил к нему проект Tinkoff.InvestApi.Sample
  2. Добавил в Dependencies-Packages пакет Tinkoff.InvestAPI 0.1.0
  3. Создал токен для sandbox по инструкции, добавил его в секреты проекта
  4. Собрал и запустил проект - ошибка ниже.
  5. Попробовал вместо использования секрета явно указать токен, как тут - ошибка такая же

Grpc.Core.RpcException HResult=0x80131500 Message=Status(StatusCode="Unauthenticated", Detail="") Source=System.Private.CoreLib StackTrace: at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Grpc.Net.Client.Internal.Retry.RetryCallBase2.<GetResponseAsync>d__63.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method2 method, String host, CallOptions options, TRequest request) at Grpc.Core.Interceptors.InterceptingCallInvoker.<BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext2 context, BlockingUnaryCallContinuation2 continuation) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method2 method, String host, CallOptions options, TRequest request) at Tinkoff.InvestApi.V1.UsersService.UsersServiceClient.GetAccounts(GetAccountsRequest request, CallOptions options) at Tinkoff.InvestApi.V1.UsersService.UsersServiceClient.GetAccounts(GetAccountsRequest request, Metadata headers, Nullable1 deadline, CancellationToken cancellationToken) at Tinkoff.InvestApi.V1.UsersService.UsersServiceClient.GetAccounts(CancellationToken cancellationToken) at Tinkoff.InvestApi.Sample.UsersServiceSample.GetUserInfoDescription() in \Tinkoff.InvestApi.Sample\UsersServiceSample.cs:line 38 at Tinkoff.InvestApi.Sample.SyncSample.ExecuteAsync(CancellationToken stoppingToken) in \Tinkoff.InvestApi.Sample\SyncSample.cs:line 18 at Microsoft.Extensions.Hosting.BackgroundService.StartAsync(CancellationToken cancellationToken) at Microsoft.Extensions.Hosting.Internal.Host.d__12.MoveNext() `

AdilBikeev commented 2 years ago

@kamilzakiev Подозреваю, что вы так указали токен

                .AddInvestApiClient((_, settings) =>
                    {
                        settings.AccessToken = Configuration[nameof(settings.AccessToken)];
                    }
                )

Где в качесве user-secret указали токен типо такого "Bearer t.sfasfasfasfdsafasfgasfas", вместо " t.sfasfasfasfdsafasfgasfas". Я просто с такой же проблемой столкнулся, пока не глянул, что токен подставляется с уже добавленным Bearer https://github.com/Tinkoff/invest-api-csharp-sdk/blob/main/Tinkoff.InvestApi/InvestApiClientExtensions.cs line 30

kamilzakiev commented 2 years ago

@kamilzakiev Подозреваю, что вы так указали токен

                .AddInvestApiClient((_, settings) =>
                    {
                        settings.AccessToken = Configuration[nameof(settings.AccessToken)];
                    }
                )

Где в качесве user-secret указали токен типо такого "Bearer t.sfasfasfasfdsafasfgasfas", вместо " t.sfasfasfasfdsafasfgasfas". Я просто с такой же проблемой столкнулся, пока не глянул, что токен подставляется с уже добавленным Bearer https://github.com/Tinkoff/invest-api-csharp-sdk/blob/main/Tinkoff.InvestApi/InvestApiClientExtensions.cs line 30

Я напрямую указывал токен:

var builder = Host.CreateDefaultBuilder(args);
var host = builder
    .ConfigureServices((context, services) =>
    {
        if (context.Configuration.GetValue<bool>("Sync"))
            services.AddHostedService<SyncSample>();
        else
            services.AddHostedService<AsyncSample>();

        string token = "t.xxxxxxxxx";
        services.AddInvestApiClient((_, settings) => settings.AccessToken = token);

    })
    .Build();
await host.RunAsync();

но все равно выскакивает та же ошибка. Тот же токен работает в OpenSDK. У вас получилось запуститься с этим SDK?

EmptyBucket commented 2 years ago

Столкнулся с той же проблемой. Я немного подебажил. Вот в чем дело: "Sandbox token is not suitable for this operation" для UsersServiceClient.{GetAccountsAsync, GetInfoAsync, ...}

rus-art commented 2 years ago

Ну да, sandbox токен может использоваться только с sandbox методами, а в примере много других методов