Я отлаживаю ASP. Net код API и обнаружил, что в следующей строке для identity
задано значение NULL, что приводит к выдаче ошибки:
var identity = await _options.IdentityResolver(loginDetails, serverDetails);
Код, который выдает ошибку:
if (identity == null)
{
var error = _options.GetFailureError();
var errorMessage = _options.GetFailureMessage();
context.Response.StatusCode = 400;
switch (error)
{
case TokenError.HostRetrieval:
await context.Response.WriteAsync("Could not retrieve the login servers for this device");
break;
case TokenError.HostValidation:
await context.Response.WriteAsync("Could not validate the login servers for this device");
break;
case TokenError.UserLogin:
var message = String.IsNullOrEmpty(errorMessage) ? "Error occured while trying to authenticate user" : errorMessage;
await context.Response.WriteAsync(message);
break;
default:
await context.Response.WriteAsync("Error occured while trying to log in");
break;
}
return;
}
В случае коммутатора ошибка составляет TokenError.HostValidation
. loginDetails
и serverDetails
такие, какими они должны быть, поэтому я предполагаю, что _options.identityResolver
- это проблема, поэтому я ищу, где установлен _options.identityResolver
. Все это происходит в классе с именем TokenProviderMiddleware
, который начинается следующим образом:
public class TokenProviderMiddleware
{
private readonly RequestDelegate _next;
private readonly TokenProviderOptions _options;
private readonly JsonSerializerSettings _serializerSettings;
...
Проблема в том, что единственное место в коде, где я могу найти ссылки TokenProviderMiddleware
, это строка:
app.UseMiddleware<TokenProviderMiddleware>(Options.Create(tokenProviderOptions));
и когда я устанавливаю точку останова на этой линии, она не попадает в цель. Так что я не могу понять, где установлен _options.identityResolver
.
Кто-нибудь знает, как мне к этому подойти? Этот код использует CustomTokenProvider
, а не SimpleTokenProvider
.