SDK do Microsoft Proteção de Informações – permissões definidas pelo usuário

O SDK do Microsoft Proteção de Informações dá suporte a dois tipos principais de permissões controladas por rótulo: baseadas em modelo e definidas pelo usuário.

  • Permissões baseadas em modelo: O administrador do rótulo define esses direitos no portal do Microsoft Purview. Esses rótulos são gerenciados centralmente e as alterações de configuração afetam os usuários que já têm cópias dos arquivos. Por exemplo, se o administrador remover um usuário da lista de usuários autorizados, esse usuário não terá mais acesso aos dados protegidos na próxima vez que tentar buscar uma licença.

  • Permissões definidas pelo usuário: o usuário final ou o aplicativo define esses direitos no momento da rotulagem. Transmita permissões para o SDK do MIP na forma de uma coleção de mapeamentos de usuário para funções ou de usuários para direitos de acesso. O SDK do MIP grava esses direitos na licença de publicação do documento protegido. Ao contrário das permissões baseadas em modelo, você não pode gerenciar ou modificar centralmente esses direitos após o compartilhamento sem acesso direto e modificação do documento.

Usuários, direitos e funções

Como o usuário define direitos no momento da rotulagem, seu aplicativo deve fornecer uma interface para que o usuário ou o serviço insira endereços de email e direitos ou funções. Para configurar o acesso, passe uma coleção de objetos UserRoles ou UserRights que definem quem tem qual nível de acesso aos documentos.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "bob@contoso.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

O resultado é uma coleção List<UserRights> que especifica que tanto Alice quanto Bob têm VIEW e EDIT sobre o arquivo protegido. Para adicionar mais usuários com um conjunto diferente de permissões, repita o processo para criar um segundo UserRights objeto, passe os novos usuários e permissões e adicione-o List<UserRights> à coleção chamando userRightsList.Add(userRights2).

O mesmo padrão se aplica a UserRoles. Para implementá-lo, substitua os direitos por funções e crie uma List<UserRoles> coleção.

Proteção para um domínio

A aplicação de permissões definidas pelo usuário para um domínio requer um prefixo de email conhecido e o domínio de destino como o endereço de email. Esse endereço parece AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@contoso.com.

Em seu aplicativo, os usuários devem ser capazes de especificar um domínio, como contoso.com ou fabrikam.com. Quando o aplicativo cria o descritor de proteção, ele anexa AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ ao sufixo de domínio.

Esse grupo conhecido também é como você concede direitos a todos os usuários autenticados em uma organização. O AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ grupo contém todos os usuários no locatário Microsoft Entra especificado, portanto, é o equivalente mais próximo ao grupo ANYONE do AD RMS (Active Directory Rights Management Services). O escopo é sempre restrito a um único locatário: não existe identidade entre locatários que conceda direitos a qualquer usuário autenticado em qualquer organização; portanto, adicione uma entrada AllStaff-...@domain separada para cada organização que você deseja incluir. Para obter mais informações, consulte Configurar direitos de uso para Proteção de Informações do Azure.

No exemplo a seguir, o usuário especifica alice@contoso.com e todos os Fabrikam.com como destinatários válidos.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@fabrikam.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

Aplicar proteção

Para definir a proteção, crie um ProtectionDescriptor a partir do List<UserRights> objeto ou List<UserRoles> , em seguida, passe esse descritor para FileHandler.SetProtection(). Por fim, confirme a alteração no arquivo para gravar um novo arquivo.

Quando aplicar proteção a arquivos

Quando você define um rótulo usando FileHandler.SetLabel(), o SDK do MIP tem tudo o que precisa para tomar medidas e aplicar qualquer proteção. Quando um rótulo usa permissões definidas pelo usuário (UDP), seu aplicativo não tem como saber antecipadamente que o rótulo é um rótulo UDP. O SDK do MIP apresenta essas informações gerando uma exceção do tipo Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException. Seu FileHandler código deve capturar essa exceção e, em seguida, disparar sua interface de usuário ou serviço para definir as permissões personalizadas. Depois que esse processo for concluído, você poderá definir a proteção. O exemplo a seguir mostra o padrão de ponta a ponta, mas pressupõe que você já implementou uma função para compilar o List<UserRights> objeto.

try
{
    // Attempt to set the label. If it's a UDP label, this will throw. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());
}

catch (Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException)
{
    // Assumes you've create a function that returns the List<UserRights> as previously detailed. 
    List<UserRights> userRightsList = GetUserRights();

    // Create a ProtectionDescriptor using the set of UserRights.
    ProtectionDescriptor protectionDescriptor = new ProtectionDescriptor(userRightsList);
    
    // Apply protection to the file using the new ProtectionDescriptor. 
    handler.SetProtection(protectionDescriptor, new ProtectionSettings());

    // Set the label. This will now succeed as protection has been defined. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());

    // Commit the change. 
    var result = Task.Run(async () => await handler.CommitAsync("myFileOutput.xlsx")).Result;
}

Proteção personalizada

Você também pode usar esse processo para definir apenas a proteção, configurando a proteção e ignorando a etapa SetLabel(). Se o aplicativo não precisar aplicar um rótulo, o manipulador de exceção não será necessário. Para definir a proteção, siga o ProtectionDescriptor padrão –>SetProtection() –>CommitAsync() .

Próximas Etapas