O ponto final do token não é resolvido em relação a um tipo de controlador
-
20-12-2019 - |
Pergunta
Tenho tentado seguir exemplos de como configurar a API da Web para usar tokens de portador com o Asp.Net Identity 2.0 e tive um soluço.Seguindo este tutorial http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api afirma que devo poder postar em http://{servername}/Token para obter um token de portador.quando faço isso, recebo uma exceção para Castle Windsor quando ele tenta resolver o Token como controlador.
O que estou tentando realizar de maneira geral é fazer login usando o controlador de conta predefinido e, em seguida, recuperar um token.Estou tentando usar cookies e tokens ao portador.
- esta é a abordagem correta para usar o controlador de conta padrão para autenticação?
- se esta não for a abordagem correta, devo seguir o tutorial mais de perto e fazer com que o usuário faça login em um controlador de API?
- o que preciso fazer na configuração do IoC para garantir que meus pontos finais sejam resolvidos?
Solução
A autorização no WebApi deve ser tratada em um MessageHandler, não no nível do controlador.
Você deve criar um MessageHandler responsável por verificar um token OAuth Berarer:esse manipulador de mensagens pode (deve) ser resolvido pelo seu IoC e então configurado no pipeline WebApi.
public static void RegisterGlobalHandlers(HttpConfiguration config, IWindsorContainer container)
{
var authorizationMessageHandler = container.Resolve<AuthorizationMessageHandler>();
config.MessageHandlers.Add(authorizationMessageHandler);
}
DotNetOpenOAuth é um ótimo lugar para começar:dê uma olhada no implementação do manipulador de amostra/mensagem mvc5.