Escopo

De acordo com IETF RFC 6749, o valor do parâmetro de escopo é expresso como uma lista de sequências delimitada por espaço com distinção entre maiúsculas e minúsculas.

No IBM® API Connect, escopos não têm significado inerente. Em vez disso, os escopos são definidos no Provedor OAuth para que um aplicativo possa solicitar um token de acesso válido para um ou mais dos escopos. Na API segura, os escopos são listados como requisitos para que um token de acesso seja considerado válido. Todos os escopos listados pela definição de segurança para a API devem ser concedidos pelo token de acesso.
Nota:
  • Um Provedor do OAuth deve ter pelo menos um escopo
  • Um token OAuth não será concedido a menos que um escopo padrão seja configurado no provedor ou um ou mais escopos predefinidos sejam incluídos na solicitação de concessão.
  • Se nenhum escopo padrão for definido e a solicitação não contiver um escopo, um erro de escopo inválido será retornado para a solicitação..

Provedor OAuth

Para oferecer um suporte mais refinado ao tratamento do escopo do OAuth, permite que a extensão de registro de usuário Authentication URL modifique o valor do escopo.

Ao definir um provedor OAuth, as extensões de Verificação de escopo avançada fornecem a flexibilidade para verificar e substituir escopos permitidos. As extensões opcionais são Verificação de escopo do aplicativo e Verificação de escopo do proprietário.

O escopo que é eventualmente recebido pelo aplicativo é determinado pelas interações que são descritas nos três parágrafos a seguir. O processamento de escopo segue a sequência dos itens 1, 2, e 3 na lista a seguir, oferecendo três oportunidades para substituir o valor do escopo.. A Figura 1 fornece uma visão geral do processo.

  1. Após o aplicativo ser autenticado com êxito e se OAuth Native Provider > Verificação de escopo avançada > Verificação de escopo do aplicativo for configurado, API Connect fará uma chamada para permitir verificação extra e usará o conteúdo de x-selected-scope para substituir o valor do escopo que foi solicitado inicialmente pelo aplicativo. Quando a Verificação de Escopo do Aplicativo for ativada, o cabeçalho de resposta HTTP x-selected-scope deverá estar presente, ou a chamada falhará.
  2. Se o provedor OAuth Native > Segurança do usuário > Autenticação estiver configurado para autenticar usuários de aplicativos usando uma autenticação URL, então API Connect faz uma chamada, conforme documentado em Autenticação URL registro de usuário. Quando o código de resposta éHTTP 200, e o cabeçalho de resposta x-selected-scope estiver presente, o valor configurado em x-selected-scope será usado como o novo valor do escopo, substituindo o que o aplicativo já solicitou e o que foi fornecido na verificação do escopo do Aplicativo descrito no parágrafo 1. No cabeçalho de resposta, x-selected-scope é um elemento opcional..
  3. Após a autenticação bem-sucedida do usuário, e se o provedor OAuth Native > Verificação avançada de escopo > Verificação do escopo do proprietário estiver ativado e configurado com um URL válido, o API Connect fará uma chamada para permitir que o conteúdo do x-selected-scope refine o valor do escopo. Quando Verificação de Escopo do Proprietário for ativada, o cabeçalho de resposta HTTP x-selected-scope deverá estar presente, ou a chamada falhará.
    Figura 1. Visão geral de escopo avançado OAuth
    Visão geral do escopo avançado do OAuth

A permissão de escopo final concedida pelo token de acesso é o resultado do fluxo descrito nos itens 1, 2 e 3. A Figura 2 mostra uma visualização mais detalhada do fluxo de transação com exemplos que mostram quando o x-selected-scope fornece um novo valor do escopo

Figura 2 Detalhes de escopo avançado OAuth
Detalhe do escopo avançado do OAuth

Cumprimento de API do consumidor

Validação do escopo padrão
Para acessar a API /getaccount , o aplicativo deve enviar uma solicitação GET com um token de acesso que contenha o escopo ou escopos definidos no provedor OAuth. Se a solicitação não contiver um escopo, você deverá especificar um escopo padrão para usar. Se nenhum escopo padrão for definido e a solicitação não contiver um escopo, um erro de escopo inválido será retornado para a solicitação..
GET /getaccount
HTTP/1.1
Host: server.example.com
X-IBM-Client-Id: 8888-8888-8888
Authorization: Bearer AAEkNjVkOWIyYjgtOWY5ZS00YWQwLWIyYzktZ
O arquivo OpenAPI secure-banking.yaml do aplicativo a seguir define o escopo, ou escopos, que deve existir no token para receber acesso à API /getaccount.
secure-banking.yaml

securityDefinitions:
   scope-only:
    type: oauth2
    description: ''
    flow: implicit
    authorizationUrl: ''
    scopes:
      checking: 'Checking Account'
      saving: 'Saving Account'
      mutual: 'Mutual Fund Account'
security:
  - scope-only:
      - checking
  - scope-only:
      - saving
      - mutual
Nos exemplos, o token de acesso AAEkNjVkOWIyYjgtOWY5ZS00YWQwLWIyYzktZ pode acessar a API porque ele contém uma ou uma combinação de scope-only que é definida em secure-banking.yaml , como:
  • checking
  • saving mutual
  • checking saving mutual
Verificação de escopo avançada

Os administradores podem ativar uma verificação de escopo adicional configurando a propriedade da API do consumidor Advanced Scope Check URL que se torna x-scopeValidate , conforme mostrado no seguinte OpenAPI exemplo de arquivo.

securityDefinitions:
  advanced-scope-only:
    type: oauth2
    description: ''
    flow: implicit
    authorizationUrl: ''
    scopes:
      checking: 'Checking Account'
      saving: 'Saving Account'
      mutual: 'Mutual Fund Account'
    x-scopeValidate:
      url: 'https://advanced-scope-check.bk.com/validate-scope'
      tls-profile: 'ssl-client'

Após verificar com êxito o token de acesso com relação a qualquer requisito de escopo, fará uma solicitação HTTP POST para o terminal x-scopeValidate semelhante ao exemplo a seguir. Código de RespostaHTTP 200do terminal indica um sucesso. Qualquer outro código de resposta ou um erro de conexão é tratado como um erro de permissão para o token.

     POST /validate-scope?app-name=..&appid=..&org=..&orgid=..&catalog=..&catalogid=..&transid=.. 
HTTP/1.1
     Host: advanced-scope-check.bk.com
     Content-Type: application/json

   {"context-root" : checking,
    "resource" : accountinfo,
    "method" : GET,
    "api-scope-required" : [jointaccount],
    "access_token" : {"client_id" : "2cd71759-1003-4a1e-becb-0474d73455f3",
                      "not_after" : 174364070,
                      "not_after_text" : "2017-07-11T02:27:50Z",
                      "not_before" : 174360470,
                      "not_before_text" : "2017-07-11T01:27:50Z",
                      "grant_type" : "code",
                      "consented_on" : 1499736470,
                      "consented_on_text" : "2059-07-11T01:27:50Z",
                      "resource_owner" : "cn=spoon,email=spoon@poon.com",
                      "scope" : "jointaccount mutual",
                      "miscinfo" : "[r:gateway]"
                    }
}
Um exemplo de resposta bem-sucedida é mostrado a seguir.
     HTTP/1.1 200 OK
     Cache-Control: no-store
     Pragma: no-cache
     X-Custom-For-Assemble-Process: audit

Qualquer cabeçalho de resposta HTTP que começa com "x-" é mantido como a variável de contexto oauth.advanced-consent. Com base na resposta bem-sucedida de exemplo, X-Custom-For-Assemble-Process: audit se tornaoauth.advanced-consent.x-custom-for-assemble-processe pode ser acessado na etapa de montagem.

Opções de validação adicionais

Opcionalmente, é possível usar campos adicionais para validação:

Cabeçalho de solicitação
Define a expressão regular para corresponder aos cabeçalhos de solicitação . Os cabeçalhos correspondentes são incluídos na solicitação para o terminal de validação de escopo avançado
Variável de contexto de resposta

Define a expressão regular para corresponder aos cabeçalhos de resposta . Cabeçalhos correspondentes são salvos como variáveis de contexto no formato oauth.advanced-consent.*.