Procedimentos: utilizar a autenticação ADAL
Importante
As versões do Microsoft Rights Management Service SDK lançadas antes de março de 2020 são depreciadas; as aplicações que utilizam versões anteriores devem ser atualizadas para utilizar a versão de março de 2020. Para mais detalhes, consulte o aviso de depreciação.
Não estão previstas mais melhorias para o Microsoft Rights Management Service SDK. Recomendamos vivamente a adoção do Proteção de Informações da Microsoft SDK para serviços de classificação, rotulagem e proteção.
Autenticação com o Azure RMS para a sua aplicação com o ADAL (Azure Active Directory Authentication Library).
Ao atualizar a aplicação para utilizar a autenticação ADAL em vez do Assistente de Início de Sessão Online da Microsoft, o utilizador e os seus clientes poderão:
- Utilizar a autenticação multifator
- Instalar o cliente RMS 2.1 sem necessidade de privilégios administrativos no computador
- Certificar a aplicação para o Windows 10
Duas abordagens para autenticação
Este tópico contém duas abordagens para autenticação com os exemplos de código correspondentes.
Autenticação interna – Autenticação OAuth gerida pelo SDK RMS.
Utilize esta abordagem se pretender que o cliente RMS apresente um pedido de autenticação ADAL quando a autenticação for necessária. Para obter detalhes sobre como configurar a sua aplicação, consulte a secção “Autenticação interna”.
Nota
Se a sua aplicação utilizar atualmente o SDK AD RMS 2.1 com o assistente de início de sessão, recomendamos que utilize o método de autenticação interno como o caminho de migração da sua aplicação.
Autenticação externa – Autenticação OAuth gerida pela sua aplicação.
Utilize esta abordagem se pretender que a aplicação efetue a gestão da sua própria autenticação OAuth. Com esta abordagem, o cliente RMS irá exercer uma chamada de retorno definida pela aplicação quando a autenticação for necessária. Para obter um exemplo detalhado, consulte “Autenticação externa” no final deste tópico.
Nota
A autenticação externa não implica a capacidade de alterar os utilizadores. O cliente RMS utiliza sempre o utilizador predefinido de um inquilino do RMS especificado.
Autenticação interna
- Siga os passos da configuração do Azure em Configurar o Azure RMS para autenticação ADAL e, em seguida, volte ao passo de inicialização de aplicação seguinte.
- Agora está pronto para configurar a sua aplicação para utilizar a autenticação ADAL interna fornecida pelo SDK RMS 2.1.
Para configurar o cliente RMS, adicione uma chamada para IpcSetGlobalProperty imediatamente após chamar IpcInitialize para configurar o cliente RMS. Utilize o seguinte fragmento de código como um exemplo.
IpcInitialize();
IPC_AAD_APPLICATION_ID applicationId = { 0 };
applicationId.cbSize = sizeof(IPC_AAD_APPLICATION_ID);
applicationId.wszClientId = L"GUID-provided-by-AAD-for-your-app-(no-brackets)";
applicationId.wszRedirectUri = L"RedirectionUriWeProvidedAADForOurApp://authorize";
HRESULT hr = IpcSetGlobalProperty(IPC_EI_APPLICATION_ID, &applicationId);
if (FAILED(hr)) {
//Handle the error
}
Autenticação Externa
Utilize este código como um exemplo de como gerir os seus próprios tokens de autenticação.
extern HRESULT GetADALToken(LPVOID pContext, const IPC_NAME_VALUE_LIST& Parameters, __out wstring wstrToken) throw();
HRESULT GetLicenseKey(PCIPC_BUFFER pvLicense, __in LPVOID pContextForAdal, __out IPC_KEY_HANDLE &hKey)
{
IPC_OAUTH2_CALLBACK pfGetADALToken =
[](LPVOID pvContext, PIPC_NAME_VALUE_LIST pParameters, IPC_AUTH_TOKEN_HANDLE* phAuthToken) -> HRESULT
{
wstring wstrToken;
HRESULT hr = GetADALToken(pvContext, *pParameters, wstrToken);
return SUCCEEDED(hr) ? IpcCreateOAuth2Token(wstrToken.c_str(), OUT phAuthToken) : hr;
};
IPC_OAUTH2_CALLBACK_INFO callbackCredentialContext =
{
sizeof(IPC_OAUTH2_CALLBACK_INFO),
pfGetADALToken,
pContextForAdal
};
IPC_CREDENTIAL credentialContext =
{
IPC_CREDENTIAL_TYPE_OAUTH2,
NULL
};
credentialContext.pcOAuth2 = &callbackCredentialContext;
IPC_PROMPT_CTX promptContext =
{
sizeof(IPC_PROMPT_CTX),
NULL,
IPC_PROMPT_FLAG_SILENT | IPC_PROMPT_FLAG_HAS_USER_CONSENT,
NULL,
&credentialContext
};
hKey = 0L;
return IpcGetKey(pvLicense, 0, &promptContext, NULL, &hKey);
}