4D NetKit: Autenticação OpenID segura com atributo nonce

Tradução automática de Deepl

Quando se trabalha com fluxos de autenticação modernos, a segurança é fundamental. Os programadores precisam frequentemente de integrar a autenticação com fornecedores de identidade fiáveis, como a Google ou a Microsoft. É aqui que o OpenID Connect (OIDC) entra em ação.

O OIDC é uma camada de identidade construída sobre o OAuth 2.0. Permite que a sua aplicação verifique a identidade de um utilizador e obtenha informações básicas de perfil de uma forma segura. Começando com os últimos melhoramentos da classe cs.NetKit.OAuth2Provider 4D 21 agora torna mais fácil trabalhar com OpenID Connect suportando o parâmetro nonce, junto com novos atributos token, incluindo o id_token.

Quando solicita escopos OAuth 2.0 padrão, receberá um access_token, que é destinado a acessar APIs mas não diz quem é o usuário. Para identificar o utilizador, é necessário incluir o âmbito openid. Isto ativa a camada OpenID Connect e garante que o fornecedor de identidade também devolve um id_token.

Os âmbitos adicionais podem enriquecer as informações incluídas no id_token:

  • openid → obrigatório, ativa o OpenID Connect e fornece um id_token.
  • profile → opcional, retorna informações de perfil, como nome, apelido e foto.
  • email → opcional, inclui o endereço de correio eletrónico do utilizador.

O parâmetro nonce é específico dos pedidos OpenID Connect. Associa uma sessão de cliente ao Token de ID devolvido e ajuda a proteger contra ataques de repetição.

  • É opcional, mas fortemente recomendado para melhorar a segurança.
  • O valor é passado sem modificações do pedido de autenticação para o Token de ID.

O que é o ID_Token?

O id_token é uma propriedade do objeto token, devolvido quando o âmbito openid é solicitado. Contém informações de identidade do utilizador no formato JWT. Uma vez que está codificado como texto, é necessário desserializar o JWT para ler o seu conteúdo. Para isso, pode utilizar a classe JWT contida no Netkit.

var $provider:={}
$provider.name:="Microsoft"
$provider.permission:="signedIn"
$provider.clientId:="xxxx"
$provider.redirectURI:="http://127.0.0.1:80/authorize/"
$provider.scope:="openid profile email" // request identity + profile info
$provider.nonce:="randomNonce456" // optional nonce value 

var $oauth:=cs.NetKit.OAuth2Provider.new($provider)
var $token:=$oauth.getToken()

// Access the id_token
If ($token.token.id_token#Null)

  // Deserialize the JWT result with cs.NetKit.JWT class
  var $openID:=cs.NetKit.JWT.new().decode($token.token.id_token)
  
  If ($openID.payload.nonce=$param.nonce)
     ALERT("Hello "+$openID.payload.name)
  End if 

End if 

//$openID={ 
//   header: {
//      typ: "JWT";
//      alg: "RS256";
//      kid: "HS23b7Do..."
//   };
//   payload: {
//      aud: "b6822251-7...";     // the clientId (your application).
//      iss: "https://login.microsoftonline.com/06dc191b-7348-4b66-b0d9-806cb7d9455b/v2.0";
//      iat: 1758537433;          // the time when the token was issued.
//      nbf: 1758537433;          // the earliest time when the token is considered valid.
//      exp: 1758541333;          // the token expiration time.
//      email: "your.name@outlook.com";
//      name: "Your Name";       
//      nonce: "randomNonce456";  // the value sent in the request to protect against replay attacks (if used).
//      oid: "064fd139-65...";    // the unique identifier of the user’s account in the identity provider’s directory
//      preferred_username: "your.name@outlook.com";
//      rh: "1.AV8AGxncBkhz...";  // refresh token handle
//      sid: "008cb789-7...";     // session ID
//      sub: "6RcYjA-CqS...";     // the unique identifier of the user
//      tid: "06dc191b-73...";    // identifies the tenant (organization)
//      uti: "sS7qSOW0...";       // unique token identifier
//      ver: "2.0"
//   };
//   signature": "gy4AwVunCf_NbeUP..."
//}

Conclusão

Com a introdução do suporte a nonce e id_token, 4D simplifica a integração do OpenID Connect. Solicitando os escopos corretos e decodificando o id_token, suas aplicações podem autenticar usuários de forma segura enquanto acessam informação de identidade confiável.

Fabrice Mainguené
- Proprietário do produto ->p>Fabrice Mainguené juntou-se à equipa do Programa 4D em Novembro, 2016. Como Proprietário do Produto, está encarregado de escrever as histórias dos utilizadores, traduzindo-as depois para especificações funcionais. O seu papel é também o de assegurar que a implementação da funcionalidade entregue vai ao encontro das necessidades do cliente.Após a obtenção da licenciatura em Informática no CNAM, Fabrice juntou-se a uma pequena empresa editora de software como programador Windev. Depois trabalhou para diferentes empresas nas áreas da indústria e comércio como programador Windev e web developer, bem como como consultor técnico sobre novas funcionalidades.