Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ API Gateway/ Melhores práticas/ Desenvolvimento de um autorizador personalizado com FunctionGraph
Atualizado em 2024-08-05 GMT+08:00

Desenvolvimento de um autorizador personalizado com FunctionGraph

Visão geral

As melhores práticas para o APIG da Huawei Cloud orientam você pelo desenvolvimento de autorizadores personalizados.

Além do IAM e da autenticação de aplicações, o APIG também suporta autenticação personalizada com seu próprio sistema de autenticação, que pode se adaptar melhor aos recursos de sua empresa.

A autenticação personalizada é implementada usando o serviço FunctionGraph. Você pode criar uma função de FunctionGraph para que o APIG possa invocá-la para autenticar solicitações para sua API. Esta seção usa a autenticação básica como um exemplo para descrever como implementar a autenticação personalizada com o FunctionGraph.

Desenvolvimento de uma função de autenticação personalizada

Crie uma função no console do FunctionGraph consultando Criação de uma função para autenticação personalizada de front-end.

Especifique o tempo de execução como Python 3.6.

Tabela 1 Configuração da função

Parâmetro

Descrição

Function Type

Padrão: Event Function

Region

Selecione a mesma região que a do APIG.

Function Name

Insira um nome que esteja em conformidade com regras específicas para facilitar a pesquisa.

Agency

Uma agência que delega FunctionGraph para acessar outros serviços em nuvem. Para este exemplo, selecione Use no agency.

Enterprise Project

A opção padrão é default.

Runtime

Selecione Python 3.6.

Na página de guia Code, copie o seguinte código para index.py (se você estiver usando um gateway dedicado, para o qual o parâmetro authorizer_context_support_num_bool foi ativado, o tipo de value no context pode ser boolean ou number).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# -*- coding:utf-8 -*-
import json
def handler(event, context):
# If the authentication information is correct, the username is returned.
    if event["headers"]["authorization"]=='Basic dXN****cmQ=':
        return {
            'statusCode': 200,
            'body': json.dumps({
                "status":"allow",
                "context":{
                    "user_name":"user1"
                }
            })
        }
    else:
        return {
            'statusCode': 200,
            'body': json.dumps({
                "status":"deny",
                "context":{
                    "code": "1001",  
                    "message":"incorrect username or password",
                    "authorizer_success": "false"  
                }
            })
        }

Criação de um autorizador personalizado

No console do APIG, acesse a página Create Custom Authorizer, defina Type como Frontend, selecione a função criada na seção anterior e clique em OK.

Criação de uma API de autenticação personalizada

Crie uma API consultando Criação de uma API. Defina o modo de autenticação como Custom e selecione o autorizador personalizado criado na seção anterior. Depois de modificar a API, publique-a.

Configuração da resposta a erros

Se informações de autenticação incorretas forem transportadas em uma solicitação para a API, a resposta será exibida da seguinte forma:

1
{"error_msg":"Incorrect authentication information: frontend authorizer","error_code":"APIG.0305","request_id":"36e42b3019077c2b720b6fc847733ce9"}

Para retornar o campo no context da função como a resposta da API (se você estiver usando um gateway dedicado, para o qual o parâmetro authorizer_context_support_num_bool foi ativado, o tipo de value em context pode ser boolean ou number), modifique o modelo de resposta do gateway. Na página de detalhes do grupo ao qual a API pertence, navegue até a área Gateway Responses na guia Gateway Information e clique em Edit. Altere o código de status para 401, modifique o modelo de resposta com o seguinte código e clique em OK (não é necessário adicionar aspas duplas para variáveis do tipo boolean ou number):

1
{"code":"$context.authorizer.frontend.code","message":"$context.authorizer.frontend.message", "authorizer_success": "$context.authorizer.frontend.authorizer_success"}

2

Após a modificação, se a autenticação incorreta for transferida ao chamar a API, o código de status 401 será retornado e o resultado da resposta será o seguinte:

1
 {"code":"1001","message":"incorrect username or password","authorizer_success": "false"}

Mapeamento de parâmetros de autenticação de front-end para parâmetros de back-end

Se a autenticação for bem-sucedida, as informações de contexto retornadas pela função podem ser transferidas para o back-end da API. Para fazer isso, execute as seguintes configurações:

Na página APIs, escolha More > Edit na linha que contém a API e vá para a página Define Backend Request. Adicione um parâmetro do sistema, especifique o tipo de parâmetro como Frontend authentication parameter, defina o nome do parâmetro para o conteúdo do campo context na resposta da função e defina o nome e a localização do parâmetro de back-end para o qual você deseja mapear o parâmetro de autenticação do front-end.

Depois de modificar a API, publique-a novamente. Se as informações de autenticação transportadas em uma solicitação para a API estiverem corretas, o resultado da resposta conterá o campo de cabeçalho X-User-Name cujo valor é o mesmo do user_name no campo context da função de autenticação.