Я реализовал аутентификацию JWT без сохранения состояния в Nancy 1.4.5, и она работала нормально.
Портируя мой проект на Nancy 2.0.0, механизм аутентификации больше не работает.
В методе ApplicationStartup загрузчика у меня есть:
protected override void ApplicationStartup(IKernel container, IPipelines pipelines)
{
#region JWT authentication
// JWT stateless authentication, see: https://foreverframe.net/nancy-meets-jwt-authentication/
var secretKey = LocalConstants.Authorization.SecretKey;
string cryptografyAlgorithm = LocalConstants.Authorization.CryptografyAlgorithm;
string bearerDeclaration = LocalConstants.Authorization.HttpHeaderBearerDeclaration;
var identityProvider = new IdentityProvider(secretKey, cryptografyAlgorithm, bearerDeclaration);
var statelessAuthConfig = new StatelessAuthenticationConfiguration(identityProvider.GetUserIdentity);
StatelessAuthentication.Enable(pipelines, statelessAuthConfig);
#endregion
...
Во время выполнения клиенты могут выполнить вход в систему и правильно получить JWT. Они сохраняют JWT в заголовке HTTP в последующих запросах. Когда последующие запросы достигают сервера, метод GetUserIdentity моего identityProvider считывает JWT и правильно возвращает действительный ClaimsPrincipals.
В моем модуле
this.RequiresAuthentication();
, однако, возникает исключение Nancy.ErrorHandling.RouteExecutionEarlyExitException с причиной «Требуется аутентификация», причиной «Требуется аутентификация» и ответом «Несанкционированный текст / html» с кодом состояния Nancy.HttpStatusCode.Unauthorized.
Как правильно перенести проверку подлинности без сохранения состояния на Nancy 2.0.0?