Closed kamilzakiev closed 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 Подозреваю, что вы так указали токен
.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?
Столкнулся с той же проблемой. Я немного подебажил. Вот в чем дело: "Sandbox token is not suitable for this operation" для UsersServiceClient.{GetAccountsAsync, GetInfoAsync, ...}
Ну да, sandbox токен может использоваться только с sandbox методами, а в примере много других методов
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.ConfiguredTaskAwaitable
1.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.TaskAwaiter
1.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, ClientInterceptorContext
2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext2 context, BlockingUnaryCallContinuation
2 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, Nullable
1 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.