Provedor de segurança OAuth no Jitterbit App Builder
O provedor de segurança OAuth habilita o suporte para OAuth 2.0. O provedor de segurança é responsável por autorizar solicitações de serviços web. Os seguintes tipos de fonte de dados suportam OAuth:
-
REST
-
OData
-
RDBMS (limitado aos provedores CData suportados)
Além disso, é possível configurar um provedor de segurança OAuth como um provedor de autenticação externo. Veja abaixo para mais informações.
Concessões OAuth 2.0
O provedor de segurança OAuth suporta as seguintes concessões OAuth 2.0:
-
Código de Autorização RFC 6749.
-
Credenciais do Cliente RFC 6749.
-
Credenciais de Senha do Proprietário do Recurso RFC 6749.
-
Aserção Bearer SAML 2.0 RFC 7522.
-
Token Bearer JWT RFC 7523.
Código de autorização
A concessão de Código de Autorização OAuth 2.0 fornece autorização delegada em nível de usuário. Esta concessão é definida na RFC 6749.
No fluxo de Código de Autorização, o App Builder redireciona o agente do usuário (navegador) para o servidor de autorização. Uma vez que o usuário tenha feito login com sucesso e aprovado a solicitação de autorização, o servidor de autorização redireciona o agente do usuário de volta para o App Builder. O redirecionamento inclui um código de autorização. O App Builder faz uma solicitação de canal reverso ao servidor de autorização, trocando o código de autorização por um token de acesso. O token de acesso pode então ser usado para autorizar solicitações a serviços web.
Por si só, o OAuth fornece autorização, não autenticação. Portanto, os provedores de segurança OAuth não são tipicamente usados como provedores de autenticação externos: eles são usados para autorizar solicitações a um provedor de dados compatível, como OData ou REST. No entanto, se o provedor de segurança OAuth publicar um endpoint que forneça a identidade do usuário, o provedor de segurança OAuth pode ser usado como um provedor de autenticação externo. Veja o Endpoint de Informações do Usuário para mais detalhes.
Credenciais do cliente
A concessão de Credenciais do Cliente do OAuth 2.0 fornece autenticação em nível de cliente, semelhante a uma conta de serviço. Neste fluxo, as credenciais do cliente OAuth são trocadas por um token de acesso OAuth. A concessão de Credenciais do Cliente é definida na RFC 6749.
Credenciais de senha do proprietário do recurso
A concessão de Credenciais de Senha do Proprietário do Recurso do OAuth 2.0 é definida na RFC 6749. No entanto, a concessão foi descontinuada.
Importante
A concessão de credenciais de senha do proprietário do recurso NÃO DEVE ser utilizada.
Conforme concebido originalmente, a concessão de Credenciais de Senha do Proprietário do Recurso do OAuth 2.0 fornece autorização em nível de usuário. O usuário fornece seu nome de usuário e senha a um cliente confiável. O cliente confiável troca as credenciais por um token de acesso.
O App Builder oferece suporte parcial para a concessão de Credenciais de Senha do Proprietário do Recurso do OAuth 2.0. O App Builder não solicita ao usuário suas credenciais. Em vez disso, uma única credencial é usada para autorizar todos os usuários. Dessa forma, a concessão é funcionalmente equivalente a uma conta de serviço.
Aserção portadora SAML 2.0
A concessão de Aserção Portadora SAML 2.0 do OAuth 2.0 fornece autenticação em nível de usuário e fonte de dados. Neste fluxo, as asserções SAML são trocadas por tokens de acesso OAuth. A concessão de Aserção Portadora SAML 2.0 do OAuth 2.0 é definida na RFC 7522.
Token portador JWT
A concessão de Token Portador JWT do OAuth 2.0 fornece autenticação em nível de usuário e fonte de dados. Neste fluxo, Tokens Web JSON (JWTs) são trocados por tokens de acesso OAuth. A concessão de Token Portador JWT do OAuth 2.0 é definida na RFC 7523.
Configuração
A configuração varia com base na concessão do OAuth. No mínimo, o OAuth requer:
-
Identificador do cliente (
client_id
) e segredo do cliente (client secret
). -
Endpoint do token.
Concessões individuais de OAuth exigirão configuração adicional, conforme indicado abaixo.
Autenticação
As propriedades de autenticação determinam a concessão de OAuth e os esquemas de autenticação.
-
Tipo de Autenticação: OAuth
-
Concessão de OAuth: Selecione uma concessão de OAuth suportada.
-
Autenticação do Cliente OAuth: Determina o esquema de autenticação do cliente OAuth 2.0 RFC 6749 Seção 2.3. As opções incluem:
-
Nenhum: Indica que o cliente não deve ser autenticado. (
none
.) -
Básico: Indica que o esquema de Senha do Cliente será usado. As credenciais serão fornecidas usando autenticação HTTP Básica. (
client_secret_basic
.) -
Post: Indica que o esquema de Senha do Cliente será usado. As credenciais serão fornecidas como parâmetros de formulário no corpo da solicitação. (
client_secret_post
.)
-
-
Autenticação de Recurso OAuth: Determina o esquema de autenticação da solicitação de recurso. As opções incluem:
-
Bearer: Esquema de autenticação Bearer. Padrão.
-
Formulário: Anexa o token de acesso ao corpo codificado em URL do formulário.
-
Consulta: Anexa o token de acesso à string de consulta.
-
-
Proprietário do Token: Determina se os tokens são emitidos para usuários individuais ou para o sistema cliente. As opções incluem:
-
Usuário: Tokens são emitidos para usuários individuais.
-
Cliente: Tokens são emitidos para o sistema cliente.
-
-
Excluir Token ao Sair: Quando ativado, o App Builder exclui o token armazenado quando o usuário faz logout. Padrão: Desativado.
Token
As seguintes concessões geram tokens que são trocados por tokens de acesso OAuth:
-
Aserção Bearer SAML 2.0.
-
Token Bearer JWT.
Aserção bearer SAML 2.0
-
Emissor: O emissor da asserção SAML.
-
Público: A restrição de público da asserção SAML. Embora a especificação SAML indique que o público é uma URI, muitas implementações não respeitam isso. Consequentemente, o App Builder não exige que o público seja uma URI.
-
Destinatário: O URI do destinatário da asserção SAML (por exemplo,
http://example.com/service
).
Token portador JWT
-
Emissor: Reivindicação do emissor JWT (https://tools.ietf.org/html/rfc7523#section-3). O padrão é o identificador do cliente (
client_id
). -
Sujeito: Reivindicação do sujeito JWT (https://tools.ietf.org/html/rfc7523#section-3).
-
Se o Proprietário do Token for Usuário, o padrão é a identidade do usuário atual.
-
Se o Proprietário do Token for Cliente, o Sujeito é obrigatório.
-
-
Público: Reivindicação do público JWT (https://tools.ietf.org/html/rfc7523#section-3). O padrão é o Endpoint do Token.
Endpoints
Tipo | Concessões | Descrição |
---|---|---|
Endpoint de Autorização |
Código de Autorização | URL do endpoint de autorização OAuth 2.0. RFC 6749 |
Endpoint de Token |
Todos | URL do endpoint de token OAuth 2.0. RFC 6749 |
Endpoint de Informações do Usuário |
Código de Autorização | Endpoint que fornece a identidade do usuário. Necessário ao tratar o OAuth como um provedor de autenticação externo. Não faz parte do padrão OAuth. O endpoint deve retornar uma resposta JSON que inclua a identidade do usuário. |
Credenciais
Tipo | Concessões | Descrição |
---|---|---|
Client |
Todas | Identificador do cliente OAuth 2.0 (client_id ) e segredo (client_secret ). RFC 6749 |
Resource Owner |
Credenciais de Senha do Proprietário | Nome de usuário do proprietário do recurso OAuth 2.0 (username ) e senha (password ). RFC 6749 |
Certificados
Tipo | Concessões | Descrição |
---|---|---|
Signing |
Aserção Portadora SAML 2.0 | A concessão de Aserção Portadora SAML 2.0 requer um certificado X.509 com chave privada em um contêiner PKCS#12 (.pfx) protegido por senha. |
Token Portador JWT | A concessão de Token Portador JWT requer uma chave privada RSA PKCS#1 codificada em PEM (RSA PRIVATE KEY ). |
Propriedades
O provedor de segurança OAuth suporta os seguintes parâmetros adicionais:
Parâmetro | Padrão | |
---|---|---|
BearerSchemeIdentifier |
Bearer |
Esquema de Authorization ao usar a autenticação de recurso Bearer . |
ExpiresIn |
Expiração do token de acesso em segundos. Pode ser usado se o endpoint do token não fornecer uma expiração e o servidor de recursos não retornar uma resposta 401 Unauthorized quando o token de acesso tiver expirado. |
|
IgnoreTlsErrors |
False |
Indica se o App Builder deve ignorar erros de TLS ao fazer solicitações de back-channel para o endpoint do token. Isso deve ser usado apenas para desenvolvimento e testes. |
Scopes |
Lista de escopos do token de acesso OAuth 2.0 delimitada por espaços em branco. RFC 6749 | |
SingleUseAccessToken |
False |
Indica se o token de acesso pode ser usado apenas uma vez. |
Token Endpoint Parameters |
Parâmetros passados para o endpoint do token OAuth. Por padrão, o App Builder gerará os parâmetros apropriados com base no fluxo OAuth. Use esta configuração apenas para APIs OAuth não conformantes ou de outra forma não suportadas. Os parâmetros devem ser especificados no formato URL codificado (application/x-www-form-urlencoded ). Se a lista de parâmetros começar com um e comercial (& ), os parâmetros serão mesclados nos parâmetros gerados. Se um parâmetro tiver o mesmo nome que um parâmetro gerado, o parâmetro gerado será sobrescrito. Se um parâmetro fornecido não tiver um valor, por exemplo, &grant_type&username=user&password=password , o parâmetro gerado será removido. Caso contrário, o parâmetro fornecido é anexado aos parâmetros gerados. A lista de parâmetros suporta interpolação de strings. Expressões podem referenciar parâmetros dinâmicos, por exemplo username={{ client_id }}&password={{ client_secret }} . Isso é útil ao integrar com APIs de terceiros que não usam nomes de parâmetros padrão. |
|
RefreshRequiresScopes |
False |
Indica se os escopos (scope ) devem ser incluídos no corpo da solicitação enviada ao endpoint do token ao atualizar o token de acesso. |
Código de autorização
As seguintes propriedades adicionais se aplicam ao fluxo de Código de Autorização.
Parâmetro | Padrão | |
---|---|---|
BackchannelAuthorization |
False |
Indica se um código de autorização pode ser adquirido por meio de uma solicitação de backchannel (servidor para servidor). Esta é uma extensão não padrão ao fluxo de Código de Autorização. |
Aserção portadora SAML 2.0
As seguintes propriedades adicionais se aplicam ao fluxo de Aserção Portadora SAML 2.0.
Parâmetro | |
---|---|
SamlSingleSignOnProvider |
Nome de um provedor de segurança SAML do App Builder. Este parâmetro se aplica apenas ao fluxo de Aserção Portadora SAML 2.0. |
Token portador JWT
As seguintes propriedades adicionais se aplicam ao fluxo de Token Portador JWT.
Parâmetro | Padrão | |
---|---|---|
JwtClaimSet |
{ "scope": "{{ scope }}" } |
Servidores de autorização podem exigir declarações personalizadas. Por exemplo, o Google requer uma declaração scope que corresponda ao parâmetro scope do OAuth. O parâmetro JwtClaimSet permite que os administradores forneçam declarações adicionais. O valor assume a forma de um modelo JSON. Os seguintes valores podem ser substituídos no modelo:
|
SigningAlgorithm |
RS256 |
Parâmetro do algoritmo JWT conforme definido em RFC 7518. O único algoritmo suportado é RS256 . |
Rest
As seguintes propriedades adicionais se aplicam quando o provedor de segurança OAuth é usado para autenticar fontes de dados REST. Estas são ignoradas para endpoints OAuth e outros tipos de fontes de dados, incluindo OData e RDBMS.
Os cabeçalhos de solicitação devem ser separados por um retorno de carro (aparecer em sua própria linha).
Parâmetro | Padrão | Exemplo | |
---|---|---|---|
RequestHeaders |
X-Custom-Header: Value X-Another-Header: Value |
Cabeçalhos HTTP personalizados anexados às solicitações de endpoint REST. Os cabeçalhos devem ser formatados de acordo com RFC 7230. A quebra de linha não é suportada. |
Suporte a protocolo
Tokens de atualização
Se a solicitação de token de acesso incluir um token de atualização, o App Builder tentará automaticamente usar o token de atualização para adquirir um novo token de acesso após receber uma resposta 401 Unauthorized
.
Código de autorização
Solicitação de autorização
Ao construir uma solicitação de autorização, o App Builder incluirá o identificador do cliente (client_id
), o segredo do cliente (client_secret
) e os escopos (scope
). Além disso, o App Builder anexará automaticamente os seguintes parâmetros padrão:
-
redirect_uri
: O App Builder constrói o parâmetroredirect_uri
a partir da URL atual. Ele assume a formahttps://example.com/Vinyl/signin-OAuth
, onde OAuth é o nome do provedor de segurança OAuth. -
state
: O parâmetro de estado é uma carga útil opaca e criptografada. Ele inclui um token de Cross-Site Request Forgery (CSRF) conforme RFC 6749.
Redirection endpoint
Conforme definido no RFC 6749, o fluxo de autorização com Código de Autorização expõe um Endpoint de Redirecionamento. Este endpoint escuta as respostas de autorização no endereço:
https://example.com/Vinyl/signin-OAuth
Onde https://example.com/Vinyl
é a URL absoluta do diretório raiz da aplicação App Builder e OAuth é o nome do provedor de segurança, sensível a maiúsculas e minúsculas, codificado em URL.
A maioria das aplicações de terceiros precisará ser configurada com o endpoint de redirecionamento antes de autorizar qualquer solicitação.
Using OAuth for external authentication
Como mencionado acima, OAuth é um protocolo de autorização, não um protocolo de autenticação. No entanto, algumas implementações de fornecedores estendem o protocolo OAuth para incluir autenticação. Normalmente, isso é feito publicando um endpoint que identifica o usuário. O App Builder se refere a tal endpoint como User Info Endpoint.
O App Builder pode ser configurado para consultar o User Info Endpoint para recuperar a identidade do usuário. Isso permite que um provedor de segurança OAuth seja usado para autenticação externa. No entanto, observe que o endpoint deve atender aos seguintes requisitos:
-
O endpoint deve ser acessível pelo App Builder.
-
O endpoint deve responder a uma solicitação HTTP
GET
que não inclua um corpo de solicitação. -
O endpoint deve respeitar a autenticação de cliente Basic do OAuth (conforme descrito acima).
-
A resposta HTTP deve ter um código de status
200
. -
A resposta HTTP deve incluir um corpo com um
Content-Type
deapplication/json
. -
O documento JSON deve incluir uma propriedade de nível superior que identifique o usuário.
Após adquirir o token de acesso, o App Builder fará uma solicitação autenticada pelo cliente ao User Info Endpoint. O App Builder analisará o corpo da resposta como JSON, tratando as propriedades de nível superior como declarações.
Por exemplo, dada a seguinte resposta de amostra:
HTTP/1.1 200 OK
Content-Type: application/json
{
"user_name": "arthur.dent",
"name": "Arthur Dent",
"email": "arthurdent@example.com"
}
Os seguintes tipos de declarações estarão disponíveis:
-
user_name
-
name
-
email
Além de especificar o Endpoint de Informações do Usuário, o desenvolvedor deve mapear a reivindicação que identifica o usuário – neste caso, a reivindicação user_name
– para o tipo de uso da reivindicação Nome.
SAML 2.0 bearer assertion
Ao usar o fluxo de Bearer Assertion do SAML 2.0, as afirmações SAML podem ser obtidas de duas maneiras:
-
O App Builder gera e assina as afirmações SAML sob demanda. Nesse caso, o App Builder atua como o IdP.
-
(Obsoleto) um provedor de identidade de terceiros (IdP) emite uma afirmação SAML durante o processo de single sign-on (SSO) do SAML. Veja o tipo de provedor SAML para mais informações.
Cada fonte requer configuração adicional.
Generate SAML assertions on-demand
Para gerar uma afirmação SAML sob demanda, configure as propriedades do Token conforme descrito acima. Além disso, a concessão de Bearer Assertion do SAML 2.0 requer um certificado de Assinatura com uma chave privada.
Source SAML assertions from an IdP
Para obter afirmações SAML de um IdP de terceiros, defina o parâmetro SamlSingleSignOnProvider.