Uso customizado do cabeçalho de autorização em uma API REST

9

Estou criando uma API REST em que os clientes são autenticados usando certificados de cliente. Um cliente nesse caso não é um usuário individual, mas algum tipo de camada de apresentação. Os usuários são autenticados usando uma abordagem personalizada e é responsabilidade da camada de apresentação verificar se isso é feito corretamente (nota: eu sei que essa não é a abordagem correta, mas a API não é pública).

Gostaria de passar o nome de usuário para cada solicitação (não a senha), mas não tenho certeza de onde fazer isso. Seria uma boa ideia usar o cabeçalho de autorização?

Matsen75
fonte

Respostas:

20

Usar o cabeçalho de autorização parece ser a coisa certa a fazer. É todo o objetivo do cabeçalho da autorização.

Em http://tools.ietf.org/html/rfc7235#section-4.2 :

O campo de cabeçalho "Autorização" permite que um agente do usuário se autentique com um servidor de origem - geralmente, mas não necessariamente, após receber uma resposta 401 (Não autorizada). Seu valor consiste em credenciais que contêm as informações de autenticação do agente do usuário para a região do recurso que está sendo solicitado.

Se você possui seu próprio esquema de autenticação, documente, mas não há necessidade de reinventar a roda.

Zach Dennis
fonte
3
Ele não apenas parece ser a coisa certa, que é a coisa certa. (Eu tenho pesquisado isso o dia todo) A Seção 4.1 na RFC 7235 demonstra expressamente o uso de um esquema personalizado "Newauth" no "Por exemplo", junto com um esquema padrão "Básico", permitindo que o cliente use sua escolha de qualquer esquema . Dito isto, se você estiver usando um esquema "padrão", deverá usá-lo corretamente. A resposta de Zach está correta e a de Filip está incorreta .
Stephen P
3

Eu não recomendaria que você fizesse uso fora do padrão de um cabeçalho HTTP padrão. Principalmente porque pode ser enganoso para outros desenvolvedores que sabem como o Authoriziationcabeçalho deve ser usado na autenticação HTTP, mas também para evitar possíveis problemas com outras partes da sua pilha com conhecimento conflitante do mesmo cabeçalho de solicitação.

Seja qual for o caso, não há nada que impeça o uso de um X-Authorization-Usercabeçalho personalizado e não padrão , especificamente para seus propósitos.

Filip Dupanović
fonte
100% concordaram. Se você deseja fazer algo personalizado, é para isso que X-servem os cabeçalhos prefixados. Se você usar um cabeçalho padrão, não o use para nada de incomum ou inesperado.
precisa saber é o seguinte
2
Só pensei que eu devo mencionar que o "X-" foi reprovada: stackoverflow.com/questions/3561381/...
Matsen75
Por esta resposta, isso significa que o Amazon S3 está fazendo errado? docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
Tom Lianza
4
-1. Conforme mencionado por Zach Dennis, ao contrário da maioria dos outros cabeçalhos HTTP, o cabeçalho de autorização foi projetado para ser estendido e existe uma maneira claramente especificada de como definir seu próprio esquema de autorização. Em uma casca de noz, apenas certifique-se de usar um nome de esquema de autorização personalizado.
Lie Ryan