Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
- Andróide
- Cordova
- Ios
- Windows
- Xamarin.Android
- Xamarin.Forms
- Xamarin.iOS
Visão geral
Este tópico mostra como autenticar usuários de um Aplicativo Móvel do Serviço de Aplicativos a partir de seu aplicativo do cliente. Neste tutorial, você adicionará autenticação ao projeto de início rápido do Xamarin.iOS usando um provedor de identidade compatível com o Serviço de Aplicativo. Depois de ser autenticado e autorizado com êxito pelo aplicativo móvel, o valor da ID do usuário é exibido e você poderá acessar dados restritos da tabela.
Primeiro, você deve concluir o tutorial Criar um aplicativo Xamarin.iOS. Se você não usar o projeto de servidor de início rápido baixado, deverá adicionar o pacote de extensão de autenticação ao seu projeto. Para obter mais informações sobre pacotes de extensão de servidor, consulte Work with the .NET back-end server SDK for Azure Mobile Apps.
Registrar seu aplicativo para autenticação e configurar os Serviços de Aplicativo
Primeiro, você precisa registrar seu aplicativo no site de um provedor de identidade e, em seguida, definirá as credenciais geradas pelo provedor no back-end dos Aplicativos Móveis.
Configure seu provedor de identidade preferencial seguindo as instruções específicas do provedor:
- Azure Active Directory
- Microsoft
Repita as etapas anteriores para cada provedor que você deseja dar suporte em seu aplicativo.
Adicionar seu aplicativo às URLs de Redirecionamento Externo Permitidas
A autenticação segura requer que você defina um novo esquema de URL para seu aplicativo. Isso permite que o sistema de autenticação redirecione de volta para seu aplicativo depois que o processo de autenticação for concluído. Neste tutorial, usamos o esquema de URL appname ao longo. No entanto, você pode usar qualquer esquema de URL escolhido. Ele deve ser exclusivo para seu aplicativo móvel. Para habilitar o redirecionamento no lado do servidor:
No portal do Azure, selecione o Serviço de Aplicativo.
Clique na opção de menu Autenticação/Autorização .
Na seção URLs de Redirecionamento Externo Permitidas, insira
url_scheme_of_your_app://easyauth.callback
. O url_scheme_of_your_app nessa cadeia de caracteres é o Esquema de URL para seu aplicativo móvel. Ele deve seguir a especificação de URL normal para um protocolo (usar somente letras e números e começar com uma letra). Você deve anotar a cadeia de caracteres escolhida, pois precisará ajustar o código do aplicativo móvel com o Esquema de URL em vários locais.Clique em OK.
Clique em Salvar.
Restringir permissões a usuários autenticados
Por padrão, as APIs em um back-end dos Aplicativos Móveis podem ser invocadas anonimamente. Em seguida, você precisa restringir o acesso somente a clientes autenticados.
Node.js backend (por meio do portal do Azure) :
Em suas configurações de Aplicativos Móveis, clique em Tabelas Fáceis e selecione sua tabela. Clique em Alterar permissões, selecione Acesso autenticado somente para todas as permissões e clique em Salvar.
de back-end do .NET (C#):
No projeto do servidor, navegue até Controladores>TodoItemController.cs. Adicione o
[Authorize]
atributo à classe TodoItemController , da seguinte maneira. Para restringir o acesso apenas a métodos específicos, você também pode aplicar esse atributo apenas a esses métodos em vez da classe. Publique novamente o projeto do servidor.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js backend (via código Node.js) :
Para exigir autenticação para acesso à tabela, adicione a seguinte linha ao script do servidor Node.js:
table.access = 'authenticated';
Para obter mais detalhes, consulte Como exigir autenticação para acesso a tabelas. Para saber como baixar o projeto de código de início rápido do seu site, consulte Como baixar o projeto de código de início rápido de Node.js back-end usando o Git.
No Visual Studio ou no Xamarin Studio, execute o projeto cliente em um dispositivo ou emulador. Verifique se uma exceção sem tratamento com um código de status 401 (não autorizado) é gerada após o início do aplicativo. A falha é registrada no console do depurador. Portanto, no Visual Studio, você deverá ver a falha na janela de saída.
Essa falha não autorizada ocorre porque o aplicativo tenta acessar o back-end do Aplicativo Móvel como um usuário não autenticado. A tabela TodoItem agora requer autenticação.
Em seguida, você atualizará o aplicativo cliente para solicitar recursos do back-end do Aplicativo Móvel com um usuário autenticado.
Adicionar autenticação ao aplicativo
Nesta seção, você modificará o aplicativo para exibir uma tela de logon antes de exibir dados. Quando o aplicativo for iniciado, ele não se conectará ao Serviço de Aplicativo e não exibirá nenhum dado. Após a primeira vez que o usuário executar o gesto de atualização, a tela de logon será exibida; após um logon bem-sucedido, a lista de tarefas a fazer será exibida.
No projeto do cliente, abra o arquivo QSTodoService.cs e adicione a seguinte declaração "using" e o acessador
MobileServiceUser
à classe QSTodoService:using UIKit; // Logged in user private MobileServiceUser user; public MobileServiceUser User { get { return user; } }
Adicione um novo método chamado Authenticate ao QSTodoService com a seguinte definição:
public async Task Authenticate(UIViewController view) { try { AppDelegate.ResumeWithURL = url => url.Scheme == "{url_scheme_of_your_app}" && client.ResumeWithURL(url); user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); } catch (Exception ex) { Console.Error.WriteLine (@"ERROR - AUTHENTICATION FAILED {0}", ex.Message); } }
Observação
Se você estiver usando um provedor de identidade diferente de um Facebook, altere o valor passado para LoginAsync acima para um dos seguintes: MicrosoftAccount, Twitter, Google ou WindowsAzureActiveDirectory.
Abra QSTodoListViewController.cs. Modifique a definição de método de ViewDidLoad removendo a chamada para RefreshAsync() perto do final:
public override async void ViewDidLoad () { base.ViewDidLoad (); todoService = QSTodoService.DefaultService; await todoService.InitializeStoreAsync(); RefreshControl.ValueChanged += async (sender, e) => { await RefreshAsync(); } // Comment out the call to RefreshAsync // await RefreshAsync(); }
Modifique o método RefreshAsync para verificar se a propriedade User é nula. Adicione o seguinte código na parte superior da definição do método:
// start of RefreshAsync method if (todoService.User == null) { await QSTodoService.DefaultService.Authenticate(this); if (todoService.User == null) { Console.WriteLine("couldn't login!!"); return; } } // rest of RefreshAsync method
Abra AppDelegate.cs, adicione o seguinte método:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { if (client.ResumeWithURL(app, url, options)) return true; return base.OpenUrl(app, url, options); }
Abra o arquivo Info.plist , navegue até Tipos de URL na seção Avançado . Agora, configure o Identificador e os Esquemas de URL do tipo de URL e clique em Adicionar Tipo de URL. Os esquemas de URL devem ser iguais aos {url_scheme_of_your_app}.
No Visual Studio, conectado ao Host do Mac ou ao Visual Studio para Mac, execute o projeto cliente direcionado para um dispositivo ou emulador. Verifique se o aplicativo não exibe dados.
Execute o gesto de atualização puxando para baixo a lista de itens, o que fará com que a tela de logon apareça. Depois de inserir credenciais válidas com êxito, o aplicativo exibirá a lista de tarefas e você poderá atualizar os dados.