API da Web 2, autenticação OWIN, logout não efetua logout

Estou fazendo uma pesquisa para trabalhar com o objetivo de usar tokens do Bearer como um mecanismo de autenticação (ou seja, AngularJS UI, autentica via OWIN em um projeto de API da Web [2]).

Eu tenho o login funcionando bem, informações de função e tudo bem, mas não consigo fazer o token sair.

Minha configuração de inicialização é esta:

OAuthOptions = new OAuthAuthorizationServerOptions() {
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AccessTokenExpireTimeSpan = SESSION_TIMEOUT,
    AllowInsecureHttp = true
};

E minha ação de logout é simplesmente esta:

public HttpResponseMessage Logout() {
    var authentication = HttpContext.Current.GetOwinContext().Authentication;
    authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);

    return new HttpResponseMessage(HttpStatusCode.OK);
}

Deixei todo o material de autenticação por questões de brevidade, mas para confirmar que estou usandoExternalBearer ao configurar o token.

Na minha interface do usuário, estou armazenando o token no armazenamento local (nenhum cookie está envolvido aqui, o que é uma decisão deliberada de design). Então eu tenho umsair botão na minha interface do usuário, oSair ação é atingida e o código funciona bem.

No entanto, se eu clicar posteriormente em uma ação na API que requer autorização, a solicitação ainda será processada (ou seja, o usuário ainda será autenticado, mesmo quedevemos foram desconectados.

Ou estou sentindo falta de algo realmente óbvio (não seria a primeira vez ;-) ou há algo mais fundamental acontecendo aqui - finalmente, estou pingando @leastprivilege, pois sei que essa é a área deles.

Qualquer ajuda ou insight seria recebido com gratidão.

A única coisa em que consigo pensar é que o token é sem estado no lado do servidor / API e, portanto, não pode ser expirado ou desconectado.

Se for esse o caso, acho que eu poderia:

a) Adicione um token de atualização que crie um novo token que expira no passado - isso funcionaria? - na verdade, cancele isso, emitiria um novo token ... o antigo ainda seria válido

b) Armazene o token do portador no banco de dados e verifique cada vez, removendo o token no logout (salgado naturalmente, com hash, etc.). No entanto, isso está nos trazendo de volta a um servidor com estado.

c) Posso (e vou) remover o token do armazenamento local quando alguém fizer logout explicitamente; no entanto, o token ainda é tecnicamente válido seum malvado pode interceptar o token. Naturalmente, todos os itens acima terminaramSSL de qualquer maneira, o que deve inibir abandidos / meninas.

d) Talvez seja por isso que muitas pessoas estejam armazenando o token do portador em um cookie (como um mecanismo de armazenamento); assim que você fizer o logout, pelo menos, o cookie será removido na próxima atualização.

Desculpe, o exposto acima é um pouco de despejo cerebral, apenas querendo antecipar qualquer dúvida

questionAnswers(4)

yourAnswerToTheQuestion