Adicionando Políticas de Solicitação de Autenticação e Autorização para Tokens de Acesso de Vários Argumentos e Funções de Autorizador (Recomendado)
Adicione políticas de solicitação para fornecer autenticação e autorização usando tokens de acesso de vários argumentos definidos pelo usuário e funções de autorizador de vários argumentos.
Você pode adicionar políticas de solicitação:
Usando a Console para Adicionar Políticas de Solicitação para Autenticação e Autorização de Vários Argumentos
Para adicionar políticas de solicitação de autenticação e autorização para tokens de acesso de vários argumentos a uma especificação da implantação da API usando a Console:
-
Crie ou atualize uma implantação de API usando a Console, selecione a opção Criar implantação e informe detalhes na página Informações Básicas.
Para obter mais informações, consulte Implantando uma API em um Gateway da API Criando uma Implantação de API e Updating an API Gateway.
- Selecione Próximo para exibir a página Autenticação.
-
Selecione Autenticação Única para especificar que você deseja usar um único servidor de autenticação para todas as solicitações.
Estas instruções pressupõem que você deseja usar um único servidor de autenticação. Como alternativa, se quiser usar vários servidores de autenticação, selecione Multi-Authentication e siga as instruções em Usando a Console para Adicionar Vários Servidores de Autenticação à mesma Implantação de API.
-
Marque ou desmarque Ativar acesso anônimo para especificar se os usuários finais não autenticados (ou seja, anônimos) podem acessar rotas na implantação de API.
Por padrão, essa opção não está selecionada. Se você nunca quiser que usuários anônimos possam acessar rotas, não selecione essa opção. Observe que, se você selecionar essa opção, também terá que especificar explicitamente cada rota para a qual o acesso anônimo é permitido, selecionando Anônimo como o tipo de Autorização em cada política da autorização.
- Selecione Função do autorizador na lista de opções Tipo de autenticação.
- Especifique a função de autorizador de vários argumentos a ser usada para autenticar o token de acesso de vários argumentos:
- Aplicativo Oracle Functions: O nome do aplicativo no OCI Functions que contém a função de autorizador. Você pode selecionar um aplicativo de outro compartimento.
- Oracle Function: O nome da função de autorizador no OCI Functions.
- Selecione Função de autorizador de vários argumentos para especificar que você deseja transmitir um ou mais elementos de uma solicitação como um token de acesso a uma função de autorizador que possa aceitar tokens de acesso de vários argumentos.
- No painel Argumentos de função, especifique uma ou mais variáveis de contexto que forneçam valores para passar à função de autorizador como argumentos com nomes de argumento informados:
- Especifique uma variável de contexto que forneça um valor para passar à função de autorizador como argumento:
-
Tabela de contexto: Selecione a tabela de contexto que contém a variável de contexto na lista:
-
Tabela de contexto
request.query, contendo nomes e valores de parâmetros de consulta incluídos na solicitação -
Tabela de contexto
request.headers, contendo nomes e valores de cabeçalho incluídos na solicitação -
Tabela de contexto
request.cert, contendo uma versão codificada em Base64 do certificado apresentado por um cliente de API e validado com sucesso durante um handshake mTLS -
Tabela de contexto
request.host, contendo o nome do host para o qual a solicitação foi enviada (extraído do campo de cabeçalhoHostna solicitação) -
Tabela de contexto
request.body, contendo o corpo da solicitação
-
Tabela de contexto
-
Nome do cabeçalho ou Nome do parâmetro de consulta: Se você tiver selecionado a tabela de contexto
request.headersourequest.params, informe o nome do cabeçalho ou do parâmetro de consulta que deseja passar para a função de autorizador. Por exemplo,X-Api-Key,state. - Nome do argumento: Informe o nome do argumento ao qual atribuir o valor da variável de contexto. O argumento é passado para a função de autorizador. O nome do argumento informado deve corresponder ao nome do argumento que a função de autorizador espera receber.
-
Tabela de contexto: Selecione a tabela de contexto que contém a variável de contexto na lista:
- Especifique variáveis de contexto e argumentos adicionais conforme necessário (selecione Outro argumento, se necessário).
- Especifique uma variável de contexto que forneça um valor para passar à função de autorizador como argumento:
-
Opcionalmente, personalize como armazenar em cache a resposta de uma função de autorizador de vários argumentos:
- Selecione Opções avançadas.
O painel Armazenamento em cache dos resultados da função mostra quais argumentos estão presentes na chave do cache. A chave de cache identifica exclusivamente a resposta armazenada em cache retornada da função de autorizador, usando argumentos e valores de argumento informados na solicitação de autenticação original. Por padrão, todos os argumentos e valores de argumentos (exceto um argumento com um valor da tabela de contexto
request.body) que você especificou para passar à função de autorizador são usados para criar a chave de cache. - Para adicionar ou remover argumentos da chave de cache, selecione Editar.
- Marque ou desmarque os argumentos passados à função de autorizador para incluí-los ou excluí-los da chave de cache.
- Selecione Opções avançadas.
-
Opcionalmente, personalize como tratar uma resposta de autenticação com falha de uma função de autorizador de vários argumentos configurando uma política de falha de validação:
- Selecione Opções avançadas.
O painel Resposta personalizada para autenticação com falha. mostra o código de status HTTP e o corpo da mensagem a serem retornados ao cliente da API se a função de autorizador não puder autenticar a solicitação. Por padrão, o gateway de API envia um código de status HTTP 401 e o cabeçalho
WWW-Authenticatena resposta. Consulte Observações sobre Políticas de Falha de Validação e o Tratamento de Respostas de Autenticação com Falha nas Funções do Autorizador de Vários Argumentos. - Especifique um código de status (e um corpo de mensagem opcional) para retornar ao cliente da API se a função de autorizador não puder autenticar a solicitação:
-
Código de status HTTP: Informe um código de status HTTP alternativo (por exemplo,
500). Como alternativa, você pode incluir uma variável de contexto para retornar o código retornado pela função de autorizador. Por exemplo, se a função de autorizador retornar um código de resposta no parâmetroresponseCode, especifiquerequest.auth[responseCode]. -
Corpo da mensagem: Informe um corpo da mensagem. Por exemplo,
Unfortunately, authentication failed.O corpo da mensagem pode incluir qualquer variável de contexto (excetorequest.body). Por exemplo,Unfortunately, authentication failed ${request.auth[my-auth-variable]}.
-
Código de status HTTP: Informe um código de status HTTP alternativo (por exemplo,
-
Opcionalmente, modifique os cabeçalhos da resposta que o gateway de API retorna ao cliente de API selecionando Opções avançadas e especificando uma política de resposta de transformação de cabeçalho:
-
Para limitar os cabeçalhos incluídos em uma resposta, especifique:
-
Para alterar o nome de um cabeçalho incluído em uma resposta (mantendo seu valor original), especifique:
-
Para adicionar um novo cabeçalho a uma resposta (ou para alterar ou manter os valores de um cabeçalho existente já incluído em uma resposta), especifique:
Para obter mais informações sobre políticas de resposta da transformação de cabeçalho, consulte Adicionando Políticas da Resposta da Transformação de Cabeçalho
-
- Selecione Opções avançadas.
-
Selecione Próximo para informar detalhes de rotas individuais na implantação de API na página Routes.
-
Selecione Adicionar rota e especifique a primeira rota na implantação de API que mapeie um caminho e um ou mais métodos para um serviço de back-end:
-
Caminho: Um caminho para chamadas de API usando os métodos listados para o serviço de back-end. Observe que o caminho da rota que você especificar:
- é relativo ao prefixo do caminho de implantação
- deve ser precedido por uma barra ( / ) e pode ser apenas uma barra
- pode conter várias barras (desde que elas não sejam adjacentes) e pode terminar com uma barra
- pode incluir caracteres alfanuméricos maiúsculos e minúsculos
- pode incluir os caracteres especiais
$ - _ . + ! * ' ( ) , % ; : @ & = - pode incluir parâmetros e curingas (consulte Adicionando Parâmetros de Caminho e Curingas a Caminhos de Rota)
-
Métodos: Um ou mais métodos aceitos pelo serviço de back-end, separados por vírgulas. Por exemplo,
GET, PUT. -
Adicionar um único backend ou Adicionar vários backends: Se todas as solicitações devem ser roteadas para o mesmo back end ou para rotear solicitações para backends diferentes de acordo com a variável de contexto e as regras informadas.
Estas instruções supõem que você deseja usar um único back-end; portanto, selecione Adicionar um único backend. Como alternativa, se você quiser usar back-ends diferentes, selecione Adicionar vários back-ends e siga as instruções em Usando a Console para Adicionar a Seleção de Back-End Dinâmico a uma Especificação de Implantação de API.
-
Tipo de backend: O tipo do serviço de back-end, como um dos seguintes:
- HTTP: Para um back-end de HTTP, você também precisa especificar um URL, detalhes de timeout e se deve desativar a verificação SSL (consulte Adicionando um URL HTTP ou HTTPS como um Back-End do Serviço API Gateway).
- Oracle Functions: Para um back-end do OCI Functions, você também precisa especificar a aplicação e função (consulte Adicionando uma Função nas Funções do OCI como um Back-end do API Gateway).
- Resposta de estoque: Para um back-end de resposta de estoque, você também precisa especificar o código de status HTTP, o conteúdo no corpo da resposta e um ou vários campos do cabeçalho HTTP (consulte Adicionando Respostas de Estoque como um Back-end do API Gateway).
- Log-out: Para um back-end de log-out, você também precisa especificar uma lista de URLs permitidos para os quais uma solicitação pode ser redirecionada para revogar tokens e, opcionalmente, dados para passar para o URL de log-out (consulte Adicionando Log-out como um Back-End do Serviço API Gateway).
-
-
Para especificar uma política de autorização que se aplique a uma rota individual, selecione Mostrar políticas de solicitação de rota, selecione o botão Adicionar ao lado da Autorização e especifique:
-
Tipo de autorização: Como conceder acesso à rota. Especifique:
- Qualquer: Só concede acesso a usuários finais que foram autenticados com sucesso, contanto que a função do autorizador também tenha retornado um dos escopos do acesso que você especificar no campo Adicionar escopo permitido. Nesse caso, a opção Ativar acesso anônimo da política da autenticação não tem efeito.
- Anônimo: Concede acesso a todos os usuários finais, mesmo que eles não tenham sido autenticados com sucesso pela função de autorizador. Nesse caso, você deve ter selecionado a opção Ativar acesso anônimo da política.
- Somente autenticação: Só concede acesso a usuários finais que foram autenticados com sucesso pela função de autorizador. Nesse caso, a opção Ativar acesso anônimo da política da autenticação não tem efeito.
-
Adicionar escopo permitido: Se você selecionou Qualquer como o tipo de Autorização, informe uma lista delimitada pela vírgula de um ou mais strings que correspondem aos escopos do acesso retornados pela função do autorizador. O acesso só será concedido aos usuários finais que foram autenticados com sucesso se a função de autorizador retornar um dos escopos de acesso especificados. Por exemplo,
read:hello
Observação
Se você não incluir uma política de autorização para uma rota específica, o acesso será concedido como se tal política existisse e o tipo de autorização será definido comoSomente autenticação. Em outras palavras, independentemente da definição da opção Ativar acesso anônimo da diretiva de autenticação:
- somente usuários finais autenticados podem acessar a rota
- todos os usuários finais autenticados podem acessar a rota, independentemente dos escopos de acesso retornados pela função de autorizador
- usuários finais anônimos não podem acessar a rota
-
- Selecione Criar e Próximo para revisar os detalhes inseridos para a implantação de API.
- Selecione Criar ou Atualizar para criar ou atualizar a implantação de API.
- (Opcional) Confirme se a API foi implantada com êxito, chamando-a (consulte Chamando uma API Implantada em um Gateway de API).
Editando um Arquivo JSON para Adicionar Políticas de Solicitação para Autorização e Autenticação de Vários Argumentos
Para adicionar políticas de solicitação de autenticação e autorização para tokens de acesso de vários argumentos a uma especificação da implantação da API em um arquivo JSON:
-
Usando seu editor de JSON preferido, edite a especificação de implantação de API existente à qual você deseja adicionar a funcionalidade de autenticação e autorização ou crie uma nova especificação de implantação de API (consulte Criando uma Especificação de Implantação de API).
No mínimo, a especificação de implantação de API incluirá uma seção
routescontendo:- Um caminho. Por exemplo,
/hello - Um ou mais métodos. Por exemplo,
GET - Uma definição de um back-end. Por exemplo, uma URL ou o OCID de uma função no OCI Functions.
Por exemplo, a seguinte especificação de implantação básica da API define uma função simples sem servidor do Hello World nas Funções do OCI como um back-end único:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } - Um caminho. Por exemplo,
-
Adicione uma política de solicitação
authenticationque se aplique a todas as rotas na especificação de implantação de API:-
Insira uma seção
requestPoliciesantes da seçãoroutes, se ainda não existir uma. Por exemplo:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
Adicione a seguinte política
authenticationà nova seçãorequestPolicies.{ "requestPolicies": { "authentication": { "type": "<type-value>", "isAnonymousAccessAllowed": <true|false>, "functionId": "<function-ocid>", "parameters": { "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>" }, "cacheKey": [ "<cache-key-argument-n>", "<cache-key-argument-n>" ] } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }em que:
-
<type-value>é o tipo de autenticação. Para usar uma função de autorizador para autenticação, especifiqueCUSTOM_AUTHENTICATION. -
"isAnonymousAccessAllowed": <true|false>indica opcionalmente se usuários finais não autenticados (ou seja, anônimos) podem acessar rotas na especificação de implantação de API. Se você nunca quiser que usuários finais anônimos possam acessar rotas, defina essa propriedade comofalse. Se você não incluir essa propriedade na políticaauthentication, o padrãofalseserá usado. Observe que, se você não incluir essa propriedade e defini-la comotrue, também precisará especificar explicitamente cada rota para a qual o acesso anônimo é permitido, definindo a propriedadetypecomo"ANONYMOUS"na políticaauthorizationde cada rota. -
<function-ocid>é o OCID da função de autorizador implantada para o OCI Functions. -
<argument-n>é o nome do argumento ao qual atribuir o valor de uma variável de contexto, e apenas uma. O argumento é passado para a função de autorizador. O nome do argumento informado deve corresponder ao nome do argumento que a função de autorizador espera receber. É possível incluir vários pares de variáveis de contexto de argumento. -
<context-variable>é uma variável de contexto cujo valor você deseja atribuir ao argumento correspondente.<context-variable>deve estar no formato<context-table-name>ou<context-table-name>[<key>], em que<context-table-name>é uma das seguintes:-
request.query, uma tabela de contexto que contém nomes e valores de parâmetros de consulta incluídos na solicitação. Se quiser especificar um parâmetro de consulta, você deverá especificar a tabela de contextorequest.querye o nome do parâmetro de consulta como chave, no formatorequest.query[<query-parameter-name>]. Por exemplo,request.query[state] -
request.headers, uma tabela de contexto que contém nomes e valores de cabeçalho incluídos na solicitação. Se quiser especificar um cabeçalho, você deverá especificar a tabela de contextorequest.headerse o nome do cabeçalho como chave, no formatorequest.headers[<header-name>]. Por exemplo,request.headers[X-Api-Key] -
Tabela de contexto
request.cert, contendo uma versão codificada em Base64 do certificado apresentado por um cliente de API e validado com sucesso durante um handshake mTLS -
request.host, uma tabela de contexto que contém o nome do host para o qual a solicitação foi enviada (extraída do campo de cabeçalhoHostna solicitação) -
request.body, uma tabela de contexto que contém o corpo da solicitação.
-
-
"cacheKey": ["<cache-key-argument-n>", "<cache-key-argument-n>"]opcionalmente restringe a chave de cache ao uso apenas dos argumentos especificados. A chave de cache identifica exclusivamente a resposta armazenada em cache retornada da função de autorizador, usando argumentos e valores de argumento informados na solicitação de autenticação original. Por padrão, todos os argumentos e valores de argumentos (exceto um argumento com um valor da tabela de contextorequest.body) na listaparameters: {…}são usados para criar a chave de cache. Um argumento que você especifica para<cache-key-argument-n>deve ser um dos argumentos na listaparameters: {…}. Consulte Observações sobre o Armazenamento em Cache dos Resultados da Função de Autorizador de Vários Argumentos.
-
- Opcionalmente, adicione uma
validationFailurePolicyà seção de políticaauthentication:{ "requestPolicies": { "authentication": { "type": "<type-value>", "isAnonymousAccessAllowed": <true|false>, "functionId": "<function-ocid>", "parameters": { "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>" }, "cacheKey": [ "<cache-key-argument-n>", "<cache-key-argument-n>" ], "validationFailurePolicy": { "type": "MODIFY_RESPONSE", "responseCode": "<alternative-response-code>", "responseMessage": "<custom-message-body>", "responseTransformations": { "headerTransformations": { <valid-header-transformation-response-policy> } } } } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }em que:
-
"validationFailurePolicy": {…}opcionalmente permite que você altere o código de status HTTP, o corpo da mensagem e os cabeçalhos na resposta ao cliente da API se a função de autorizador não puder autenticar uma solicitação. Por padrão, o gateway de API envia um código de status HTTP 401 e o cabeçalhoWWW-Authenticatena resposta. Consulte Observações sobre Políticas de Falha de Validação e o Tratamento de Respostas de Autenticação com Falha nas Funções do Autorizador de Vários Argumentos. -
<policy-type>é o tipo de política de falha de validação. Para modificar a resposta, especifiqueMODIFY_RESPONSE. -
"responseCode": "<alternative-response-code>"especifica um código de status HTTP alternativo. Por exemplo,"responseCode": "500". Como alternativa, você pode incluir uma variável de contexto para retornar o código retornado pela função de autorizador. Por exemplo, se a função de autorizador retornar um código de resposta no parâmetroresponseCode, especifique"request.auth[responseCode]". -
"responseMessage": "<custom-message-body>"especifica o conteúdo a ser incluído no corpo da mensagem. Por exemplo,"responseMessage": "Unfortunately, authentication failed.". O corpo da mensagem pode incluir qualquer variável de contexto (excetorequest.body). Por exemplo,"responseMessage": "Unfortunately, authentication failed ${request.auth[my-auth-variable]}". -
"headerTransformations": {<valid-header-transformation-response-policy>}é uma política de resposta de transformação de cabeçalho válida. Consulte Adicionando Políticas da Resposta à Transformação de Cabeçalho.
-
-
-
Adicione uma política de solicitação
authorizationpara cada rota na especificação de implantação de API:-
Insira uma seção
requestPoliciesapós a primeira seçãobackendda rota, se ainda não existir. Por exemplo:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": {} } ] } -
Adicione a seguinte política
authorizationà seçãorequestPolicies:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">, "allowedScope": [ "<scope>" ] } } } ] }em que:
-
"type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">indica como conceder acesso à rota:-
"AUTHENTICATION_ONLY": Só concede acesso a usuários finais que foram autenticados com sucesso. Nesse caso, a propriedade"isAnonymousAccessAllowed"na políticaauthenticationda especificação de implantação de API não tem efeito. -
"ANY_OF": Só concede acesso a usuários finais que foram autenticados com sucesso, desde que a função de autorizador também tenha retornado um dos escopos de acesso especificados na propriedadeallowedScope. Nesse caso, a propriedade"isAnonymousAccessAllowed"na políticaauthenticationda especificação de implantação de API não tem efeito. -
"ANONYMOUS": Concede acesso a todos os usuários finais, mesmo que eles não tenham sido autenticados com sucesso. Nesse caso, você deve definir explicitamente a propriedade"isAnonymousAccessAllowed"comotruena políticaauthenticationda especificação de implantação de API.
-
-
"allowedScope": [ "<scope>" ]é uma lista delimitada por vírgulas de uma ou mais strings que correspondem aos escopos de acesso retornados pela função de autorizador. Nesse caso, você deve definir a propriedadetypecomo"ANY_OF"(a propriedade"allowedScope"será ignorada se a propriedadetypeestiver definida como"AUTHENTICATION_ONLY"ou"ANONYMOUS"). Observe também que, se você especificar mais de um escopo, o acesso à rota será concedido se qualquer um dos escopos especificados for retornado pela função de autorizador.
Por exemplo, a política de solicitação a seguir define uma rota
/helloque só permite que usuários finais autenticados com o escoporead:helloa acessem:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": "ANY_OF", "allowedScope": [ "read:hello" ] } } } ] } -
- Adicione uma política de solicitação
authorizationpara todas as rotas restantes na especificação de implantação de API.
Observação
Se você não incluir uma política
authorizationpara uma rota específica, o acesso será concedido como se tal política não existisse e a propriedadetypeestivesse definida como"AUTHENTICATION_ONLY". Em outras palavras, independentemente da definição da propriedadeisAnonymousAccessAllowedna políticaauthenticationda especificação de implantação de API:- somente usuários finais autenticados podem acessar a rota
- todos os usuários finais autenticados podem acessar a rota, independentemente dos escopos de acesso retornados pela função de autorizador
- usuários finais anônimos não podem acessar a rota
-
- Salve o arquivo JSON que contém a especificação de implantação de API.
-
Use a especificação de implantação de API ao criar ou atualizar uma implantação de API das seguintes formas:
- especificando o arquivo JSON na Console quando você seleciona a opção Fazer Upload de uma API de implantação existente
- especificando o arquivo JSON em uma solicitação à API REST do serviço API Gateway
Para obter mais informações, consulte Implantando uma API em um Gateway da API Criando uma Implantação de API e Updating an API Gateway.
- (Opcional) Confirme se a API foi implantada com êxito, chamando-a (consulte Chamando uma API Implantada em um Gateway de API).
Observações sobre o Uso de Funções de Autorizador de Vários Argumentos e Tokens de Acesso
Observações sobre o Armazenamento em Cache dos Resultados da Função Autorizador de Vários Argumentos
Ao usar funções de autorizador, o gateway de API armazena em cache internamente a resposta da função de autorizador por padrão. O armazenamento em cache da resposta permite que a resposta seja reutilizada posteriormente para responder a uma solicitação de autenticação semelhante, sem chamar a função de autorizador novamente.
Para identificar exclusivamente uma resposta em cache retornada por uma função de autorizador para uma solicitação de autenticação, o gateway de API usa uma chave de cache derivada dos argumentos e valores de argumento passados para a função de autorizador que gerou a resposta. Se os valores de argumento e argumento de uma solicitação de autenticação subsequente corresponderem a uma chave de cache, a resposta em cache será usada em vez de chamar a função de autorizador desnecessariamente.
No caso de funções de autorizador de vários argumentos, por padrão, todos os argumentos e valores de argumentos (exceto um argumento com um valor da tabela de contexto request.body) passados para a função de autorizador são usados para criar a chave de cache. No entanto, você pode personalizar os argumentos e os valores de argumentos usados para criar a chave de cache, de modo que a chave de cache inclua apenas os argumentos e os valores de argumento especificados. Observe que se você remover argumentos e valores de argumentos da chave de cache, poderá introduzir o risco de uma solicitação de autenticação inválida recebida correspondente à chave de cache de uma resposta anterior a uma solicitação autenticada com sucesso. Só remova argumentos da chave de cache se tiver certeza de que os argumentos não desempenham nenhum papel na autenticação da solicitação.
Observações sobre Políticas de Falha de Validação e Tratamento de Respostas de Autenticação com Falha das Funções do Autorizador de Vários Argumentos
Ao usar uma função de autorizador de vários argumentos, você pode definir uma política de falha de validação. Uma política de falha de validação permite que você personalize o código de status HTTP, a mensagem e os cabeçalhos de resposta que o gateway de API envia a um cliente de API no caso de uma resposta de autenticação com falha de uma função de autorizador de vários argumentos.
Uma função de autorizador de vários argumentos deverá retornar uma resposta HTTP 200 (com o corpo JSON da resposta contendo "active": false e um cabeçalho WWW-Authenticate) se um token de acesso tiver sido verificado com sucesso com um provedor de identidades, mas o provedor de identidades determinou que o token é inválido,
Se a função de autorizador retornar uma resposta HTTP 200 com "active": false no corpo da resposta, por padrão, o gateway de API enviará um código de status HTTP 401 para o cliente de API (juntamente com o cabeçalho WWW-Authenticate na resposta). No entanto, você pode definir uma política de falha de validação para especificar um código de status HTTP diferente a ser retornado e para especificar uma mensagem personalizada a ser retornada no corpo da resposta.
Você também pode incluir uma política de resposta de transformação de cabeçalho em uma política de falha de validação para modificar o cabeçalho da resposta que o gateway de API retorna ao cliente de API. Ao incluir uma política de resposta de transformação de cabeçalho em uma política de falha de validação, você pode:
- limitar os cabeçalhos incluídos em uma resposta
- alterar o nome de um cabeçalho incluído em uma resposta (mantendo seu valor original)
- adicionar um novo cabeçalho a uma resposta (ou alterar ou manter os valores de um cabeçalho existente já incluído em uma resposta)
Para obter mais informações sobre como adicionar uma política de falha de validação, consulte Editando um Arquivo JSON para Adicionar Políticas de Solicitação para Autenticação e Autorização de Vários Argumentos.
Exemplo de Especificação de Implantação Usando Tokens de Acesso de Vários Argumentos
A seguinte especificação de implantação de API define:
- Uma política de solicitação de autenticação que chama uma função de autorizador de vários argumentos para executar a autenticação.
- Uma política de solicitação de autorização que especifica o que os usuários finais autenticados podem fazer.
{
"requestPolicies": {
"authentication": {
"type": "CUSTOM_AUTHENTICATION",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq",
"isAnonymousAccessAllowed": true,
"parameters": {
"xapikey": "request.headers[X-Api-Key]",
"referer": "request.headers[Referer]",
"state": "request.query[state]",
"city": "request.query[city]",
"cert": "request.cert",
"body": "request.body",
"host": "request.host"
},
"cacheKey": [
"xapikey", "referer"
],
"validationFailurePolicy": {
"type": "MODIFY_RESPONSE",
"responseCode": "request.auth[responseCode]",
"responseMessage": "Unfortunately, authentication failed.",
"responseTransformations": {
"headerTransformations": {
"setHeaders": {
"items": [
{
"name": "Location",
"values": [
"${request.auth[location]}"
]
}
]
},
"filterHeaders": {
"type": "BLOCK",
"items": [
{
"name": "topSecret"
}
]
}
}
}
}
}
},
"routes": [
{
"path": "/hello",
"methods": ["GET"],
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
},
"requestPolicies": {
"authorization": {
"type": "ANY_OF",
"allowedScope": [ "read:hello" ]
}
}
}
]
}A política de solicitação de autenticação nesta especificação de implantação de API:
- Especifica a função de autorizador de vários argumentos a ser chamada para executar a autenticação e define os argumentos
xapikey,referer,state,city,cert,bodyehostpara passar para a função de autorizador. Os valores destes argumentos são obtidos a partir de variáveis de contexto que têm valores da solicitação original. - Define uma chave de cache personalizada para identificar exclusivamente a resposta em cache retornada da função de autorizador. Em vez de usar a chave de cache padrão (que inclui todos os argumentos enviados à função de autorizador e é recomendada), essa política de solicitação de autenticação especifica que a chave de cache deve compreender apenas os valores dos argumentos
xapikeyereferrerpassados para a função de autorizador. - Inclui uma política de falha de validação que modifica a resposta de falha de validação padrão para substituir o código de status HTTP 401 padrão pelo valor da variável de contexto
request.auth[responseCode]. A variável de contextorequest.auth[responseCode]tem o valor de um parâmetro de autenticação (nesse caso, chamadoresponseCode) retornado pela função de autorizador. Da mesma forma, a mensagem de falha de validação padrão é substituída por uma string de mensagem personalizada ("Unfortunately, authentication failed."). - Inclui uma política de solicitação de transformação de cabeçalho na política de falha de validação que adiciona o cabeçalho
locationà resposta de falha de validação. O cabeçalholocationrecebe o valor da variável de contextorequest.auth[location], que tem o valor de um parâmetro de autenticação (nesse caso, chamadolocation) retornado pela função de autorizador. A política de solicitação de transformação de cabeçalho também remove cabeçalhos chamadostopSecretda resposta.
A política de solicitação de autorização nesta especificação de implantação de API só permite que os usuários finais autenticados pela função de autorizador e com o escopo read:hello acessem a rota /hello.