Aplicativos cliente públicos de conta única e múltipla
Este artigo irá ajudá-lo a entender os tipos usados em aplicativos cliente público de conta única e múltipla, com foco em aplicativos cliente público de conta única.
A Microsoft Authentication Library (MSAL) modela seu aplicativo cliente. A maioria dos aplicativos Android são considerados clientes públicos. Um cliente público é um aplicativo que não pode manter um segredo com segurança.
A MSAL especializa a superfície da API para simplificar e esclarecer a experiência de desenvolvimento de PublicClientApplication
aplicativos que permitem que apenas uma conta seja usada de cada vez. PublicClientApplication
é subclassificada por SingleAccountPublicClientApplication
e MultipleAccountPublicClientApplication
. O diagrama a seguir mostra a relação entre essas classes.
Aplicativo cliente público de conta única
A SingleAccountPublicClientApplication
classe permite que você crie um aplicativo baseado em MSAL que só permite que uma única conta seja conectada de cada vez. SingleAccountPublicClientApplication
difere das PublicClientApplication
seguintes formas:
- A MSAL rastreia a conta conectada no momento.
- Se seu aplicativo estiver usando um broker (o padrão durante o registro do aplicativo do portal do Azure) e estiver instalado em um dispositivo onde um broker esteja presente, a MSAL verificará se a conta ainda está disponível no dispositivo.
signIn
permite que você entre em uma conta explicitamente e separadamente da solicitação de escopos.acquireTokenSilent
não requer um parâmetro de conta. Se você fornecer uma conta e a conta fornecida não corresponder à conta atual rastreada pela MSAL, umaMsalClientException
será lançada.acquireToken
não permite que o usuário mude de conta. Se o usuário tentar mudar para uma conta diferente, uma exceção será lançada.getCurrentAccount
Retorna um objeto Result que fornece o seguinte:- Um booleano indicando se a conta mudou. Uma conta pode ser alterada como resultado de ser removida do dispositivo, por exemplo.
- A conta anterior. Isso é útil se você precisar fazer qualquer limpeza de dados local quando a conta for removida do dispositivo ou quando uma nova conta estiver conectada.
- A conta corrente.
signOut
Remove todos os tokens associados ao seu cliente do dispositivo.
Quando um agente de Autenticação Android, como o Microsoft Authenticator ou o Portal da Empresa do Intune, estiver instalado no dispositivo e a sua aplicação estiver configurada para utilizar o broker, signOut
não removerá a conta do dispositivo.
Cenário de conta única
O pseudocódigo a seguir ilustra o uso do SingleAccountPublicClientApplication
.
// Construct Single Account Public Client Application
ISingleAccountPublicClientApplication app = PublicClientApplication.createSingleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);
String[] scopes = {"User.Read"};
IAccount mAccount = null;
// Acquire a token interactively
// The user will get a UI prompt before getting the token.
app.signIn(getActivity(), scopes, new AuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
@Override
public void onCancel()
{
}
}
);
// Load Account Specific Data
getDataForAccount(account);
// Get Current Account
ICurrentAccountResult currentAccountResult = app.getCurrentAccount();
if (currentAccountResult.didAccountChange())
{
// Account Changed Clear existing account data
clearDataForAccount(currentAccountResult.getPriorAccount());
mAccount = currentAccountResult.getCurrentAccount();
if (account != null)
{
//load data for new account
getDataForAccount(account);
}
}
// Sign out
if (app.signOut())
{
clearDataForAccount(mAccount);
mAccount = null;
}
Aplicativo cliente público de várias contas
A MultipleAccountPublicClientApplication
classe é usada para criar aplicativos baseados em MSAL que permitem que várias contas sejam conectadas ao mesmo tempo. Ele permite que você obtenha, adicione e remova contas da seguinte maneira:
Adicionar uma conta
Use uma ou mais contas em seu aplicativo ligando uma acquireToken
ou mais vezes.
Obter contas
- Ligue
getAccount
para obter uma conta específica. - Ligue
getAccounts
para obter uma lista de contas atualmente conhecidas pelo aplicativo.
Seu aplicativo não poderá enumerar todas as contas da plataforma de identidade da Microsoft no dispositivo conhecido pelo aplicativo corretor. Ele só pode enumerar contas que foram usadas pelo seu aplicativo. As contas que foram removidas do dispositivo não serão retornadas por essas funções.
Remover uma conta
Remova uma conta chamando removeAccount
com um identificador de conta.
Se o seu aplicativo estiver configurado para usar um broker e um broker estiver instalado no dispositivo, a conta não será removida do broker quando você ligar removeAccount
para o . Apenas os tokens associados ao seu cliente são removidos.
Cenário de várias contas
O pseudocódigo a seguir mostra como criar um aplicativo de várias contas, listar contas no dispositivo e adquirir tokens.
// Construct Multiple Account Public Client Application
IMultipleAccountPublicClientApplication app = PublicClientApplication.createMultipleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);
String[] scopes = {"User.Read"};
IAccount mAccount = null;
// Acquire a token interactively
// The user will be required to interact with a UI to obtain a token
app.acquireToken(getActivity(), scopes, new AuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
@Override
public void onCancel()
{
}
});
...
// Get the default authority
String authority = app.getConfiguration().getDefaultAuthority().getAuthorityURL().toString();
// Get a list of accounts on the device
List<IAccount> accounts = app.getAccounts();
// Pick an account to obtain a token from without prompting the user to sign in
IAccount selectedAccount = accounts.get(0);
// Get a token without prompting the user
app.acquireTokenSilentAsync(scopes, selectedAccount, authority, new SilentAuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
});