OAuth_Servidor_DAO
extends DAO
in package
O Next BP como servidor de autorização OAuth 2.1 / OpenID Connect.
A concessão (grant) de um usuário a um aplicativo é uma linha de usuario_token com oauth_aplicativo_id preenchido: vale a mesma validação dos tokens de API (jti ativo, expiração, interseção com as permissões atuais do usuário), e desativar a linha na tela de Tokens de API revoga o aplicativo.
- access token: JWT RS256 de vida curta, com o jti do grant;
- refresh token: opaco, hash gravado, rotacionado a cada uso;
- código de autorização: opaco, hash gravado, uso único, PKCE S256.
Reusar um código ou um refresh token já trocado revoga o grant: é o sinal de que ele vazou (RFC 9700 §4.14).
Ver manual/pt-BR/dev_oauth.md
Table of Contents
Constants
- ESCOPOS_OIDC = array('openid', 'profile', 'email', 'offline_access')
- INATIVIDADE_REFRESH_TOKEN = '+90 days'
- PREFIXO_ESCOPO_PERMISSAO = 'nextbp:'
- STATUS_APROVADA = 'aprovada'
- STATUS_NEGADA = 'negada'
- STATUS_PENDENTE = 'pendente'
- STATUS_USADA = 'usada'
- TTL_ACCESS_TOKEN = 3600
- TTL_ID_TOKEN = 3600
- VALIDADE_CODIGO = '+5 minutes'
- VALIDADE_REQUISICAO = '+15 minutes'
Properties
- $_erp_empresa : mixed
- $_erp_filial : mixed
- $_erp_grupo : mixed
- $api_token : mixed
- $dir_dao : mixed
- $emp : mixed
- $idioma : mixed
- $instance_token : mixed
- $login_anonimo : mixed
- $token_job : mixed
- $viewcode : mixed
Methods
- __construct() : mixed
- api_token() : mixed
- aprovar() : mixed
- O usuário autorizou: cria o grant com as permissões e a validade que ele escolheu e devolve o endereço de retorno com o código.
- autenticar_cliente() : mixed
- Identifica o aplicativo que chama o endpoint. Confidencial exige o segredo; público se identifica só pelo client_id (quem o protege é o PKCE).
- AutoLoad() : mixed
- ConvertBase64() : mixed
- criar_requisicao() : mixed
- Delete_Token_JOB() : mixed
- detalhes_requisicao() : mixed
- O que a tela de consentimento mostra.
- DxParamsAddFilter() : mixed
- emp() : mixed
- filtrar_escopos() : mixed
- Escopos aceitos: os do OpenID Connect e nextbp:<chave de permissão do catálogo>, que só pré-marca a permissão no consentimento. O resto é ignorado em vez de recusado: clientes MCP costumam pedir escopos próprios, e recusar quebraria a conexão sem proteger nada.
- get_login_anonimo() : mixed
- getFormData() : mixed
- getJsonData() : mixed
- instance_token() : mixed
- introspectar() : mixed
- RFC 7662.
- isJsonRequest() : mixed
- issuer() : mixed
- Identificador do servidor de autorização: {origem}/webservice/index.php/oauth.
- limpar_expirados() : mixed
- LoadDAO() : mixed
- LoadHTML() : mixed
- LoadMail() : mixed
- LoadModel() : mixed
- LoadPDF() : mixed
- metadados() : mixed
- Metadados do servidor (RFC 8414 e OpenID Connect Discovery 1.0).
- negar() : mixed
- pkce_valido() : mixed
- possui_escopo() : mixed
- ReadBodyParams() : mixed
- ReadDxParams() : mixed
- ReadFile() : mixed
- ReadFiles() : mixed
- ReadGet() : mixed
- ReadPost() : mixed
- ReadRequest() : mixed
- recurso_valido() : mixed
- resource (RFC 8707): URI absoluta, sem fragmento.
- registrar_dinamico() : mixed
- renovar() : mixed
- revogar() : mixed
- RFC 7009: token desconhecido ou de outro aplicativo não é erro, só não faz nada.
- set_login_anonimo() : mixed
- Start_Token_JOB() : mixed
- trocar_codigo() : mixed
- url_consentimento() : mixed
- Tela de login + consentimento, no frontend beta.
- url_externa() : mixed
- url_retorno() : mixed
- userinfo() : mixed
- UserInfo do OpenID Connect.
- WhatRequest() : mixed
- limite_sql() : mixed
- Normaliza um valor que será interpolado em LIMIT/OFFSET, onde o PDO também não aceita parâmetro nomeado. Negativos viram 0, pois quebrariam a consulta.
- lista_ids_sql() : mixed
- Monta o conteúdo de um IN (...) a partir de ids já validados como inteiros.
- normalizar_ids() : array<string|int, mixed>
- Normaliza uma lista de ids para interpolação segura em um IN (...).
Constants
ESCOPOS_OIDC
public
mixed
ESCOPOS_OIDC
= array('openid', 'profile', 'email', 'offline_access')
INATIVIDADE_REFRESH_TOKEN
public
mixed
INATIVIDADE_REFRESH_TOKEN
= '+90 days'
PREFIXO_ESCOPO_PERMISSAO
public
mixed
PREFIXO_ESCOPO_PERMISSAO
= 'nextbp:'
STATUS_APROVADA
public
mixed
STATUS_APROVADA
= 'aprovada'
STATUS_NEGADA
public
mixed
STATUS_NEGADA
= 'negada'
STATUS_PENDENTE
public
mixed
STATUS_PENDENTE
= 'pendente'
STATUS_USADA
public
mixed
STATUS_USADA
= 'usada'
TTL_ACCESS_TOKEN
public
mixed
TTL_ACCESS_TOKEN
= 3600
TTL_ID_TOKEN
public
mixed
TTL_ID_TOKEN
= 3600
VALIDADE_CODIGO
public
mixed
VALIDADE_CODIGO
= '+5 minutes'
VALIDADE_REQUISICAO
public
mixed
VALIDADE_REQUISICAO
= '+15 minutes'
Properties
$_erp_empresa
protected
mixed
$_erp_empresa
$_erp_filial
protected
mixed
$_erp_filial
$_erp_grupo
protected
mixed
$_erp_grupo
$api_token
protected
static mixed
$api_token
$dir_dao
protected
static mixed
$dir_dao
= NULL
$emp
protected
mixed
$emp
$idioma
protected
mixed
$idioma
$instance_token
protected
static mixed
$instance_token
$login_anonimo
protected
static mixed
$login_anonimo
= false
$token_job
protected
static mixed
$token_job
$viewcode
protected
mixed
$viewcode
Methods
__construct()
public
__construct() : mixed
api_token()
public
static api_token() : mixed
aprovar()
O usuário autorizou: cria o grant com as permissões e a validade que ele escolheu e devolve o endereço de retorno com o código.
public
aprovar(mixed $id, mixed $sessao_model, mixed $permissoes, mixed $politica_expiracao, mixed $data_expiracao) : mixed
Parameters
- $id : mixed
- $sessao_model : mixed
- $permissoes : mixed
- $politica_expiracao : mixed
- $data_expiracao : mixed
autenticar_cliente()
Identifica o aplicativo que chama o endpoint. Confidencial exige o segredo; público se identifica só pelo client_id (quem o protege é o PKCE).
public
autenticar_cliente(mixed $client_id, mixed $client_secret[, mixed $exigir_confidencial = false ]) : mixed
Parameters
- $client_id : mixed
- $client_secret : mixed
- $exigir_confidencial : mixed = false
AutoLoad()
public
static AutoLoad(mixed $className) : mixed
Parameters
- $className : mixed
ConvertBase64()
public
static ConvertBase64(mixed $name, mixed &$request_params) : mixed
Parameters
- $name : mixed
- $request_params : mixed
criar_requisicao()
public
criar_requisicao(mixed $aplicativo_model, mixed $dados) : mixed
Parameters
- $aplicativo_model : mixed
- $dados : mixed
Delete_Token_JOB()
public
static Delete_Token_JOB() : mixed
detalhes_requisicao()
O que a tela de consentimento mostra.
public
detalhes_requisicao(mixed $id, mixed $sessao_model) : mixed
Parameters
- $id : mixed
- $sessao_model : mixed
DxParamsAddFilter()
public
DxParamsAddFilter(mixed &$params, mixed $campo, mixed $condicao, mixed $valor) : mixed
Parameters
- $params : mixed
- $campo : mixed
- $condicao : mixed
- $valor : mixed
emp()
public
emp() : mixed
filtrar_escopos()
Escopos aceitos: os do OpenID Connect e nextbp:<chave de permissão do catálogo>, que só pré-marca a permissão no consentimento. O resto é ignorado em vez de recusado: clientes MCP costumam pedir escopos próprios, e recusar quebraria a conexão sem proteger nada.
public
static filtrar_escopos(mixed $escopo) : mixed
Parameters
- $escopo : mixed
get_login_anonimo()
public
static get_login_anonimo() : mixed
getFormData()
public
static getFormData([mixed $param = null ]) : mixed
Parameters
- $param : mixed = null
getJsonData()
public
static getJsonData([mixed $param = null ]) : mixed
Parameters
- $param : mixed = null
instance_token()
public
static instance_token() : mixed
introspectar()
RFC 7662.
public
introspectar(mixed $token) : mixed
Parameters
- $token : mixed
isJsonRequest()
public
static isJsonRequest() : mixed
issuer()
Identificador do servidor de autorização: {origem}/webservice/index.php/oauth.
public
static issuer() : mixed
Com caminho, a descoberta em {issuer}/.well-known/openid-configuration passa pelo próprio webservice e funciona em qualquer servidor web. OAUTH_ISSUER sobrescreve, para instalações atrás de proxy com outro endereço público.
limpar_expirados()
public
static limpar_expirados([mixed $command_line_interface = false ]) : mixed
Parameters
- $command_line_interface : mixed = false
LoadDAO()
public
static LoadDAO(mixed $dao_class_required[, mixed $auto_construct = false ][, mixed $auto_load = false ]) : mixed
Parameters
- $dao_class_required : mixed
- $auto_construct : mixed = false
- $auto_load : mixed = false
LoadHTML()
public
static LoadHTML(mixed $html_class_required[, mixed $auto_construct = false ][, mixed $auto_load = false ]) : mixed
Parameters
- $html_class_required : mixed
- $auto_construct : mixed = false
- $auto_load : mixed = false
LoadMail()
public
static LoadMail(mixed $mail_class_required[, mixed $auto_construct = false ][, mixed $auto_load = false ]) : mixed
Parameters
- $mail_class_required : mixed
- $auto_construct : mixed = false
- $auto_load : mixed = false
LoadModel()
public
static LoadModel(mixed $model_class_required[, mixed $auto_construct = false ][, mixed $auto_load = false ]) : mixed
Parameters
- $model_class_required : mixed
- $auto_construct : mixed = false
- $auto_load : mixed = false
LoadPDF()
public
static LoadPDF(mixed $pdf_class_required[, mixed $auto_construct = false ][, mixed $auto_load = false ]) : mixed
Parameters
- $pdf_class_required : mixed
- $auto_construct : mixed = false
- $auto_load : mixed = false
metadados()
Metadados do servidor (RFC 8414 e OpenID Connect Discovery 1.0).
public
static metadados() : mixed
negar()
public
negar(mixed $id, mixed $sessao_model) : mixed
Parameters
- $id : mixed
- $sessao_model : mixed
pkce_valido()
public
static pkce_valido(mixed $code_verifier, mixed $code_challenge) : mixed
Parameters
- $code_verifier : mixed
- $code_challenge : mixed
possui_escopo()
public
static possui_escopo(mixed $escopo_texto, mixed $escopo) : mixed
Parameters
- $escopo_texto : mixed
- $escopo : mixed
ReadBodyParams()
public
ReadBodyParams([mixed $param = null ]) : mixed
Parameters
- $param : mixed = null
ReadDxParams()
public
ReadDxParams() : mixed
ReadFile()
public
ReadFile(mixed $name[, mixed $default = null ][, mixed $arrAcceptedMimeTypes = [] ]) : mixed
Parameters
- $name : mixed
- $default : mixed = null
- $arrAcceptedMimeTypes : mixed = []
ReadFiles()
public
ReadFiles(mixed $name) : mixed
Parameters
- $name : mixed
ReadGet()
public
ReadGet(mixed $name[, mixed $default = null ]) : mixed
Parameters
- $name : mixed
- $default : mixed = null
ReadPost()
public
ReadPost(mixed $name[, mixed $default = null ]) : mixed
Parameters
- $name : mixed
- $default : mixed = null
ReadRequest()
public
ReadRequest(mixed $name[, mixed $default = null ]) : mixed
Parameters
- $name : mixed
- $default : mixed = null
recurso_valido()
resource (RFC 8707): URI absoluta, sem fragmento.
public
static recurso_valido(mixed $recurso) : mixed
Parameters
- $recurso : mixed
registrar_dinamico()
public
registrar_dinamico(mixed $dados) : mixed
Parameters
- $dados : mixed
renovar()
public
renovar(mixed $aplicativo_model, mixed $refresh_token, mixed $escopo) : mixed
Parameters
- $aplicativo_model : mixed
- $refresh_token : mixed
- $escopo : mixed
revogar()
RFC 7009: token desconhecido ou de outro aplicativo não é erro, só não faz nada.
public
revogar(mixed $aplicativo_model, mixed $token) : mixed
Parameters
- $aplicativo_model : mixed
- $token : mixed
set_login_anonimo()
public
static set_login_anonimo(mixed $value) : mixed
Parameters
- $value : mixed
Start_Token_JOB()
public
static Start_Token_JOB(mixed $new_token) : mixed
Parameters
- $new_token : mixed
trocar_codigo()
public
trocar_codigo(mixed $aplicativo_model, mixed $codigo, mixed $redirect_uri, mixed $code_verifier, mixed $recurso) : mixed
Parameters
- $aplicativo_model : mixed
- $codigo : mixed
- $redirect_uri : mixed
- $code_verifier : mixed
- $recurso : mixed
url_consentimento()
Tela de login + consentimento, no frontend beta.
public
static url_consentimento(mixed $requisicao_id) : mixed
Parameters
- $requisicao_id : mixed
url_externa()
public
static url_externa() : mixed
url_retorno()
public
static url_retorno(mixed $redirect_uri, mixed $parametros) : mixed
Parameters
- $redirect_uri : mixed
- $parametros : mixed
userinfo()
UserInfo do OpenID Connect.
public
userinfo(mixed $token) : mixed
Parameters
- $token : mixed
WhatRequest()
public
WhatRequest(mixed $name[, mixed $default = null ]) : mixed
Parameters
- $name : mixed
- $default : mixed = null
limite_sql()
Normaliza um valor que será interpolado em LIMIT/OFFSET, onde o PDO também não aceita parâmetro nomeado. Negativos viram 0, pois quebrariam a consulta.
protected
limite_sql(mixed $valor[, mixed $padrao = 0 ]) : mixed
Parameters
- $valor : mixed
- $padrao : mixed = 0
lista_ids_sql()
Monta o conteúdo de um IN (...) a partir de ids já validados como inteiros.
protected
lista_ids_sql(mixed $valor) : mixed
Sem nenhum id aproveitável devolve o literal NULL, para o IN não casar com nada em vez de gerar SQL inválido.
Parameters
- $valor : mixed
normalizar_ids()
Normaliza uma lista de ids para interpolação segura em um IN (...).
protected
normalizar_ids(mixed $valor) : array<string|int, mixed>
Aceita array, string separada por vírgula ou escalar, e descarta tudo que não for numérico.
Use sempre que um valor vindo da request precisar entrar concatenado no SQL: os parâmetros nomeados do PDO não funcionam dentro de um IN (...) de tamanho variável, e é justamente aí que a concatenação crua costuma aparecer.
Parameters
- $valor : mixed
Return values
array<string|int, mixed> —Lista de inteiros reindexada; vazia quando nada é aproveitável.