SDK da Proteção de Informações da Microsoft - Consentir

A classe de enumeração mip::Consent implementa uma abordagem fácil de usar que permite que os desenvolvedores de aplicativos forneçam uma experiência de consentimento personalizada com base no ponto de extremidade que está sendo acessado pelo SDK. A notificação pode informar um usuário sobre os dados que serão coletados, como ter os dados removidos ou outras informações que sejam exigidas por lei ou pelas políticas de conformidade. Uma vez que o usuário conceda o consentimento, o aplicativo pode continuar. Esse delegado só é chamado ao tentar acessar o Active Directory Rights Management Services (AD RMS). Ele não é chamado ao acessar serviços de nuvem. Se seu aplicativo não oferecer suporte ao AD RMS, você poderá implementar um delegado que sempre retorne Consent.AcceptAlways.

Implementação

O consentimento é implementado estendendo a classe base mip::Consent e implementando GetUserConsent para retornar um dos valores de enumeração mip::Consent.

O objeto derivado de mip::Consent é transmitido ao construtor mip::FileProfile::Settings ou mip::ProtectionProfile::Settings.

Quando um usuário executa uma operação que exigiria o fornecimento de consentimento, o SDK chama o método GetUserConsent, transmitindo a URL de destino como parâmetro. É nesse método que se implementaria a exibição das informações necessárias ao usuário, permitindo que ele tome uma decisão sobre se consente ou não o uso do serviço.

  • Aceitar sempre: aceitar e lembrar-se da decisão.
  • Aceitar: consentir uma vez.
  • Rejeitar: não consentir.

Quando o SDK solicita o consentimento do usuário com esse método, o aplicativo cliente deve apresentar a URL ao usuário. Os aplicativos cliente devem fornecer alguns meios de obter o consentimento do usuário e retornar a enumeração de consentimento apropriada que corresponda à decisão do usuário.

Exemplo de implementação

class ConsentDelegateImpl final : public mip::ConsentDelegate {
public:
  ConsentDelegateImpl() = default;
  
  virtual mip::Consent GetUserConsent(const std::string& url) override;

};

Quando o SDK exige consentimento, o método GetUserConsent é chamado pelo SDK e a URL é transmitida como parâmetro. No exemplo abaixo, o usuário é notificado de que o SDK se conectará à URL fornecida e fornecerá ao usuário uma opção na linha de comando. Com base na própria escolha, o usuário aceita ou rejeita o consentimento e isso é transmitido ao SDK. Se o usuário se recusar a consentir, o aplicativo lançará uma exceção e nenhuma chamada será feita para o serviço de proteção.

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  //Print the consent URL, ask user to choose
  std::cout << "SDK will connect to: " << url << std::endl;

  std::cout << "1) Accept Always" << std::endl;
  std::cout << "2) Accept" << std::endl;
  std::cout << "3) Reject" << std::endl;
  std::cout << "Select an option: ";
  char input;
  std::cin >> input;

  switch (input)
  {
  case '1':
    return Consent::AcceptAlways;
    break;
  case '2':
    return Consent::Accept;
    break;
  case '3':
    return Consent::Reject;
    break;
  default:
    return Consent::Reject;
  }  
}

Quando em teste, ou em desenvolvimento, ou ao usar apenas os serviços baseados em nuvem, um ConsentDelegate básico pode ser implementado.

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  return Consent::AcceptAlways;
}

No entanto, no código de produção, o usuário pode ser obrigado a ser apresentado com uma escolha para consentir, dependendo dos requisitos e regulamentos regionais ou de negócios.