Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo irá ajudá-lo a compreender os tipos usados em aplicações de cliente público de uma ou múltiplas contas, com foco em aplicações de cliente público de conta única.
A Biblioteca de Autenticação Azure Active Directory (ADAL) modela o servidor. A Biblioteca de Autenticação da Microsoft (MSAL) modela, em vez disso, a sua aplicação cliente. A maioria das aplicações Android são consideradas clientes públicos. Um cliente público é uma aplicação que não consegue guardar um segredo de forma segura.
A MSAL especializa-se na superfície da PublicClientApplication API para simplificar e clarificar a experiência de desenvolvimento de aplicações que permitem usar apenas uma conta de cada vez.
PublicClientApplication é subclassificado por SingleAccountPublicClientApplication e MultipleAccountPublicClientApplication. O diagrama seguinte mostra a relação entre estas classes.
Aplicação pública de cliente de conta única
A SingleAccountPublicClientApplication aula permite-te criar uma aplicação baseada em MSAL que só permite iniciar sessão de uma única conta de cada vez.
SingleAccountPublicClientApplication difere dos PublicClientApplication seguintes aspetos:
- O MSAL acompanha a conta atualmente iniciada.
- Se a sua aplicação estiver a usar um corretor (o padrão durante o registo da aplicação Microsoft Entra) e estiver instalada num dispositivo onde um corretor esteja presente, a MSAL verificará se a conta ainda está disponível no dispositivo.
-
signInPermite-lhe iniciar sessão numa conta de forma explícita e separada de pedir os Scopes. -
acquireTokenSilentNão requer um parâmetro de conta. Se fornecer uma conta e a conta fornecida não corresponder à conta atual registada pela MSAL, é lançada umaMsalClientException. -
acquireTokennão permite ao utilizador mudar de conta. Se o utilizador tentar mudar para outra conta, é lançada uma exceção. -
getCurrentAccountdevolve um objeto de resultado que fornece o seguinte:- Um valor booleano que indica se a conta foi alterada. Uma conta pode ser alterada como resultado de ser removida do dispositivo, por exemplo.
- A conta anterior. Isto é útil se precisares de fazer alguma limpeza local de dados quando a conta é removida do dispositivo ou quando uma nova conta é iniciada.
- A Conta Corrente.
-
signOutremove todos os tokens associados ao seu cliente do dispositivo.
Quando um broker de autenticação Android, como o Microsoft Authenticator, Link to Windows (LTW) ou Intune Portal da Empresa, está instalado no dispositivo e a sua aplicação está configurada para usar o broker, signOut não remove a conta do dispositivo.
Cenário de conta única
O pseudocódigo seguinte ilustra a utilização de 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.
SignInParameters signInParameters = SignInParameters.builder()
.withActivity(getActivity()) // Pass the current activity
.withScopes(scopes) // Specify the scopes
.withCallback(new AuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult){
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.signIn(signInParameters);
// 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;
}
Aplicação cliente pública para várias contas
A MultipleAccountPublicClientApplication classe é usada para criar aplicações baseadas em MSAL que permitem iniciar sessão de várias contas ao mesmo tempo. Permite-lhe obter, adicionar e remover contas da seguinte forma:
Adicionar uma conta
Use uma ou mais contas na sua candidatura ligando acquireToken uma ou mais vezes.
Obter contas
- Ligue
getAccountpara obter uma conta específica. - Ligue
getAccountspara obter uma lista de contas atualmente conhecidas na aplicação.
A sua aplicação não conseguirá listar todas as contas da plataforma de identidades da Microsoft no dispositivo que sejam conhecidas pela aplicação intermediária. Só pode enumerar contas que foram usadas pela sua aplicação. As contas que foram removidas do dispositivo não serão devolvidas por estas funções.
Remover uma conta
Remova uma conta ligando removeAccount com um identificador de conta.
Se a sua aplicação estiver configurada para usar um corretor, e um corretor estiver instalado no dispositivo, a conta não será removida do corretor quando ligar removeAccount. Apenas os tokens associados ao seu cliente são removidos.
Cenário de múltiplas contas
O pseudocódigo seguinte mostra como criar uma aplicação com múltiplas 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
AcquireTokenParameters acquireTokenParameters = new AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(getActivity())
.withScopes(scopes)
.withCallback(new AuthenticationCallback(){
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.acquireToken(acquireTokenParameters);
...
// 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
AcquireTokenSilentParameters acquireTokenSilentParameters = new AcquireTokenSilentParameters.Builder()
.withScopes(scopes)
.forAccount(selectedAccount)
.fromAuthority(authority)
.withCallback(new SilentAuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
})
.build();
app.acquireTokenSilentAsync(acquireTokenSilentParameters);