Mapeamento de solicitação do OpenID Connect para contexto de autorização

Com base na configuração, os fluxos OAuth ou Open ID Connect no IBM® Verify podem executar ações de autorização.

Os fluxos podem incluir essas ações.

  • Avalie a política de acesso.
  • Calcule valores de solicitação que são armazenados na concessão de autorização e usados para construir tokens de ID e a resposta de introspecção.

A regra de mapeamento de solicitação de contexto fornece um mecanismo para aumentar o contexto que é coletado da solicitação de autorização. Por exemplo, a solicitação de autorização pode conter um parâmetro de solicitação customizado chamado contextID. A regra customizada pode incluir o contextID em uma solicitação HTTP para um terminal externo. O resultado dessa solicitação HTTP é um objeto que pode ser descompactado e incluído no requestContext que é usado durante a avaliação da política de acesso e o enriquecimento de concessão. Consulte r_attr_functions.html

A regra pode ser gravada usando uma linguagem simples de expressão de linha única ou como um documento baseado em YAML multilinhas mais avançado. Consulte o executor de regras de várias linhas.

Objetos de entrada disponíveis

Como a regra customizada é executada após a autenticação, mas antes da autorização, as informações que estão disponíveis não incluem todos os objetos de domínio possíveis. Eles são limitados aos objetos a seguir.
Contexto de solicitação de HTTP
Quando um usuário efetua o login no Verify, o contexto de solicitação HTTP recebido pode ser acessado na regra de mapeamento de solicitação. Todos os parâmetros de solicitação de OAuth, como claims e scope, estão disponíveis neste requestContext. A estrutura geral e o uso do requestContext são descritos na seção “ HTTP RequestContext” do documento r_attr_functions.html.
Para o acesso, determinados valores são pré-calculados no requestContext. O parâmetro de solicitação claims é geralmente representado como um arquivo JSON como o exemplo a seguir.

{
    "id_token": { 
        "claim_name": { 
            "essential": false, 
            "value": "some_value"
        }
    },
    "userinfo": {
        "claim_name": { 
            "essential": false, 
            "value": "some_value"
        }
    }
}

Este formato pode ser incômodo para acessar. A chave que é usada no requestContext está no formato claims_claimType_claimName. O claimType é userinfo ou idtoken (observe o sublinhado ausente). Assim, ao usar o exemplo anterior, o valor claim_name pode ser obtido usando requestContext.getValue('claims_idtoken_claim_name').

Da mesma forma, scope é dividido pelo separador de espaço para construir uma matriz de sequência.

Credencial de origem de identidade
Quando um usuário efetua login no Verify, os atributos de credencial de origem de identidade são incluídos na sessão de login e podem ser acessados na regra de mapeamento de solicitação.
O objeto de domínio idsuser está disponível como um mapa com uma chave de sequência e um valor de matriz de sequência. Por exemplo,

{
  "realmName": ["cloudIdentityRealm"],
  "displayName": ["Jessica J. Hill"],
  "phone": ["+12324321234"]
}
Consulte r_attr_functions.html.
Outras funções e operadores
Operadores e funções padrão estão disponíveis na regra de mapeamento. O cliente HTTP também está disponível para fazer solicitações de saída. Outras funções suportadas incluem hashing e registros de data e hora. Consulte as seções relevantes em r_attr_functions.html.

Objeto de retorno

Espera-se que esta regra customizada retorne um objeto JSON e que o valor de cada propriedade JSON seja uma matriz de sequência.

O exemplo a seguir é um objeto de retorno.

{
   "ageRange": ["toddler"],
   "interests": ["sleeping", "other_misc_activities"]
}
Esse valor de retorno é processado e pode, posteriormente, ser acessado em atributos de regra avançada usando requestContext.ageRange e requestContext.interests. Os atributos de regras avançadas podem ser usados em políticas de acesso como {{requestContext.ageRange[0] != 'toddler'}} ou para mapear atributos na concessão de autorização requestContext.interests.

Exemplo - Incluir hobbies no token de ID

O código a seguir é um exemplo da regra customizada para mapeamento de solicitação que inclui hobbies no token de ID.

statements:
- context: "contextData := hc.getAsJSON('https://jke.com/users/' + idsuser.getValue('uid'), { 'Authorization': 'apikey supersecretkey' })"
- return: >-
   {
      "hobbies": request.Context.interests.filter(x, x != 'other')
   }
Neste exemplo, a regra está chamando um terminal de usuários externos para obter informações adicionais sobre o usuário. Ele usa o objeto idsuser, que representa a sessão autenticada do usuário no Verify. Por fim, a regra extrai hobbies da resposta.
Observação: esta regra não realiza qualquer tipo de validação e não está pronta para uso em produção.
hobbies pode ser acessado pelos métodos a seguir.