As configurações de segurança da API permitem gerenciar o Session ID, as Schema Validation Settings e a Token Configuration do Edge Security Accelerator (ESA) API Security em um único local. Os identificadores de sessão são usados principalmente pelo recurso de gerenciamento de API. A configuração de token é utilizada ao definir regras de API.
Adicionar um identificador de sessão
Os identificadores de sessão distinguem sessões individuais de uma API. O ESA coleta e analisa o tráfego das APIs marcadas e gera sugestões de limitação de taxa para elas.
No console do ESA, selecione Websites e, na coluna Websites, clique em no site desejado.
No painel de navegação à esquerda, escolha Websites > API Security.
-
Na página Security, clique em na aba Settings e, em seguida, clique em API Security na seção Session ID para iniciar a configuração.

-
Selecione o tipo de identificador adequado às suas necessidades de negócio e insira o nome do cabeçalho personalizado correspondente. Estão disponíveis os seguintes tipos de identificador:
Add
Cookie
-
JWT claims: devem existir previamente ou ser criados agora.

Configure validação de schema
Faça upload de um schema de API, como uma especificação OpenAPI. O ESA associa automaticamente o schema às suas APIs gerenciadas, valida as requisições recebidas com base nele e aplica a ação configurada às requisições não conformes. Nas configurações de validação de schema, você pode ativar ou desativar o recurso, definir a ação padrão e enviar um arquivo de schema personalizado.
No console do ESA, selecione Websites e, na coluna Website, clique em no site desejado.
No painel de navegação à esquerda, escolha Security > Websites.
-
Na página Websites, clique em na aba Settings e, em seguida, clique em Configure na seção API Security para iniciar a configuração.

-
Preencha as configurações abaixo conforme suas necessidades de negócio e clique em API Security:
Status: Ative ou desative a validação de schema.
-
Default Action: Selecione a ação padrão a ser aplicada às requisições que não estiverem em conformidade com o schema. Estão disponíveis as seguintes ações:
Schema Validation Settings: Bloqueia requisições não conformes e registra um log de bloqueio. Para visualizar os detalhes, consulte Event analysis.
OK: Permite requisições não conformes e registra um log. Para visualizar os detalhes, consulte Event analysis.
None: Não executa nenhuma ação.
-
Uploaded Schema: Envie um arquivo de schema personalizado. O ESA analisa o arquivo automaticamente e o utiliza como regra de validação de conformidade da API.

Adicionar um token
Adicione informações de JSON Web Token (JWT) na Block e faça referência a elas em API token compliance validation para autenticar visitantes.
No console do ESA, selecione Websites e, na coluna Monitor, clique em no site desejado.
No painel de navegação à esquerda, escolha Security > API Security.
-
Na página Token Configuration, clique em na aba Websites e, em seguida, clique em Websites na seção Website para iniciar a configuração.

-
Especifique os seguintes parâmetros de token conforme suas necessidades de negócio.
Website: Insira um nome personalizado para o token, como
JWT-Demo.-
Token Location: Selecione onde o token está localizado na requisição. É possível selecionar o campo Header ou Settings e inserir a chave correspondente.
Para acomodar JWTs residentes em locais diferentes no seu negócio, clique em Add para criar uma condição lógica
OR. Você pode avaliar até quatro locais de token simultaneamente. -
Token Configuration: Adicione a chave do token inserindo-a manualmente ou enviando um arquivo JSON. Para requisitos de chave, consulte JWK fields.
Se você configurar várias chaves, o ESA selecionará uma chave com base no campo
kidpara validação. A validação será aprovada se qualquer uma das chaves validar o token com sucesso.
Especificações do arquivo de schema
Tipo e tamanho
Os arquivos de validação de schema devem estar no formato .yml, .yaml ou .json. O tamanho máximo do arquivo é 58 KB. Caso seu arquivo de schema exceda esse limite, utilize o formato .json e compacte-o localmente antes de fazer o upload.
Conteúdo do schema
Versão
A validação de schema do ESA suporta apenas OpenAPI Specification (OAS) v3.0.x.
Campos
Campos obrigatórios
openapi: A versão da API, como3.0.0.info: Metadados sobre a API, como"version": "1.0.0".paths: Deve conter pelo menos um caminho de API, como/api.-
servers: Informações sobre o host. Há suporte para os seguintes subcampos:url: Apenas URLs absolutas são suportadas, comohttps://api.example.com.variables: O ESA não suporta variáveis de servidor. Espaços reservados para variáveis são ignorados durante a análise.
Campos opcionais
-
schema: A definição da estrutura de dados. Há suporte para os seguintes tipos:int32
uint32
int64
uint64
float
double
boolean
email
reference: Usa$refpara referenciar um objeto predefinido. Referências externas ou relativas não são suportadas.requestBody: Define o corpo da requisição. Apenas dados comcontent-typeigual aapplication/jsonsão suportados.
Exemplo
Abaixo está um exemplo de um arquivo de schema .json.
{
"openapi": "3.0.0",
"info": {
"title": "example",
"description": "example",
"version": "1.0"
},
"servers": [
{
"url": "https://example1.aliyun.com",
"description": "example1 url"
},
{
"url": "https://example2.aliyun.com",
"description": "example2 url"
}
],
"components": {
"schemas": {
"ParamsObject": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
}
},
"paths": {
"/example/{param1}": {
"get": {
"operationId": "getexampleById",
"parameters": [
{
"name": "param1",
"in": "path",
"required": true,
"description": "id",
"schema": {
"type": "integer",
"format": "int32"
}
}
]
}
},
"/api1": {
"post": {
"operationId": "post_api1",
"summary": "post api1 request",
"parameters": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ParamsObject"
}
}
}
}
},
"get" :{
"operationId": "get_api1",
"summary": "get api1 request",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "name",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
]
}
}
}
}
Especificações do arquivo de schema
Tipo e tamanho
Os arquivos de validação de schema devem estar no formato .yml, .yaml ou .json. O tamanho máximo do arquivo é 58 KB. Caso seu arquivo de schema exceda esse limite, utilize o formato .json e compacte-o localmente antes de fazer o upload.
Conteúdo do schema
Versão
A validação de schema do ESA suporta apenas OpenAPI Specification (OAS) v3.0.x.
Campos
Campos obrigatórios
openapi: A versão da API, como3.0.0.info: Metadados sobre a API, como"version": "1.0.0".paths: Deve conter pelo menos um caminho de API, como/api.-
servers: Informações sobre o host. Há suporte para os seguintes subcampos:url: Apenas URLs absolutas são suportadas, comohttps://api.example.com.variables: O ESA não suporta variáveis de servidor. Espaços reservados para variáveis são ignorados durante a análise.
Campos opcionais
-
schema: A definição da estrutura de dados. Há suporte para os seguintes tipos:int32
uint32
int64
uint64
float
double
boolean
email
reference: Usa$refpara referenciar um objeto predefinido. Referências externas ou relativas não são suportadas.requestBody: Define o corpo da requisição. Apenas dados comcontent-typeigual aapplication/jsonsão suportados.
Exemplo
Abaixo está um exemplo de um arquivo de schema .json.
{
"openapi": "3.0.0",
"info": {
"title": "example",
"description": "example",
"version": "1.0"
},
"servers": [
{
"url": "https://example1.aliyun.com",
"description": "example1 url"
},
{
"url": "https://example2.aliyun.com",
"description": "example2 url"
}
],
"components": {
"schemas": {
"ParamsObject": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
}
},
"paths": {
"/example/{param1}": {
"get": {
"operationId": "getexampleById",
"parameters": [
{
"name": "param1",
"in": "path",
"required": true,
"description": "id",
"schema": {
"type": "integer",
"format": "int32"
}
}
]
}
},
"/api1": {
"post": {
"operationId": "post_api1",
"summary": "post api1 request",
"parameters": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ParamsObject"
}
}
}
}
},
"get" :{
"operationId": "get_api1",
"summary": "get api1 request",
"parameters": [
{
"name": "id",
"in": "query",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "name",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
]
}
}
}
}