Adicione autenticação ao seu aplicativo do iOS
Neste tutorial, você adicionará a autenticação ao projeto de início rápido do iOS usando um provedor de identidade com suporte. Este tutorial baseia-se no tutorial de início rápido do iOS , que você deve concluir primeiro.
Registrar seu aplicativo para autenticação e configurar o Serviço de Aplicativo
Primeiro, é necessário registrar seu aplicativo em um site do provedor de identidade. Em seguida, você definirá as credenciais geradas pelo provedor no back-end dos Aplicativos Móveis.
Configure o provedor de identidade preferido, seguindo as instruções específicas do provedor:
Repita as etapas anteriores para cada provedor ao qual você desejar dar suporte em seu aplicativo.
Adicionar seu aplicativo às URLs de redirecionamento externo permitidas
A autenticação segura exige que você defina um novo esquema de URL para seu aplicativo. Isso permite que o sistema de autenticação redirecione para seu aplicativo após a conclusão do processo de autenticação. Neste tutorial, usamos sempre o esquema de URL appname. No entanto, você pode usar o esquema de URL que quiser. Ele deve ser exclusivo para seu aplicativo móvel. Para habilitar o redirecionamento no lado do servidor:
No Portal do Azure, selecione seu Serviço de Aplicativo.
Clique na opção de menu Autenticação/Autorização.
Clique em Azure Active Directory na seção Provedores de Autenticação.
Defina o Modo de gerenciamento como Avançado.
Em URLs de Redirecionamento Externo Permitidas, insira
appname://easyauth.callback
. O appname na cadeia de caracteres é o esquema de URL para seu aplicativo móvel. Ele deve seguir as especificações de URL normal para um protocolo (use somente letras e números e inicie com uma letra). Você deve anotar a cadeia de caracteres escolhida, já que precisará ajustar o código do aplicativo móvel com o esquema de URL em vários lugares.Clique em OK.
Clique em Save (Salvar).
Restringir permissões a usuários autenticados
Por padrão, APIs em um back-end de Aplicativos Móveis podem ser chamadas de forma anônima. Em seguida, você precisa restringir o acesso somente aos clientes autenticados.
Back-end do Node.js (por meio do portal do Azure) :
Nas configurações de seus Aplicativos Móveis, clique em Tabelas Fáceis e selecione a tabela. Clique em Alterar permissões, selecione Apenas acesso autenticado para todas as permissões e clique em Salvar.
Back-end do .NET (C#):
No projeto do servidor, navegue até Controladores>TodoItemController.cs. Adicione o atributo
[Authorize]
à classe TodoItemController , como a seguir. Para restringir o acesso somente aos métodos específicos, você também pode aplicar esse atributo apenas aos métodos, em vez de à classe. Republicar o projeto de servidor.[Authorize] public class TodoItemController : TableController<TodoItem>
Back-end do Node.js (por meio de código Node.js) :
Para exigir autenticação para acesso à tabela, adicione a seguinte linha ao script de servidor Node.js:
table.access = 'authenticated';
Para obter mais detalhes, veja Como exigir autenticação para acesso às 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 back-end do Node.js usando Git.
No Xcode, pressione Executar para iniciar o aplicativo. Uma exceção é criada porque o aplicativo tenta acessar o back-end como um usuário não autenticado, mas a tabela TodoItem agora exige autenticação.
Adicionar autenticação ao aplicativo
Objective-C:
No Mac, abra QSTodoListViewController.m no Xcode e adicione o seguinte método:
- (void)loginAndGetData { QSAppDelegate *appDelegate = (QSAppDelegate *)[UIApplication sharedApplication].delegate; appDelegate.qsTodoService = self.todoService; [self.todoService.client loginWithProvider:@"google" urlScheme:@"appname" controller:self animated:YES completion:^(MSUser * _Nullable user, NSError * _Nullable error) { if (error) { NSLog(@"Login failed with error: %@, %@", error, [error userInfo]); } else { self.todoService.client.currentUser = user; NSLog(@"User logged in: %@", user.userId); [self refresh]; } }]; }
Altere google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver usando o Google como seu provedor de identidade. Se você usar o Facebook, deverá permitir domínios do Facebook na lista de permissões em seu aplicativo.
Substitua o urlScheme por um nome exclusivo para seu aplicativo. O urlScheme deve ser o mesmo que o protocolo de esquema de URL especificado no campo URLs de redirecionamento externo permitidas no portal do Azure. O urlScheme é usado pelo retorno de chamada de autenticação a fim de voltar para seu aplicativo depois que a solicitação de autenticação é concluída.
Substitua
[self refresh]
emviewDidLoad
em QSTodoListViewController.m pelo seguinte código:[self loginAndGetData];
Abra o arquivo
QSAppDelegate.h
e adicione o seguinte código:#import "QSTodoService.h" @property (strong, nonatomic) QSTodoService *qsTodoService;
Abra o arquivo
QSAppDelegate.m
e adicione o seguinte código:- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { if ([[url.scheme lowercaseString] isEqualToString:@"appname"]) { // Resume login flow return [self.qsTodoService.client resumeWithURL:url]; } else { return NO; } }
Adicione o código diretamente antes da linha que tem
#pragma mark - Core Data stack
. Substitua o nome do aplicativo pelo valor urlScheme que você usou na etapa 1.Abra o arquivo
AppName-Info.plist
(substituindo AppName pelo nome de seu aplicativo) e adicione o seguinte código:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.microsoft.azure.zumo</string> <key>CFBundleURLSchemes</key> <array> <string>appname</string> </array> </dict> </array>
Esse código deve ser colocado dentro do elemento
<dict>
. Substitua a cadeia de caracteres appname (dentro da matriz de CFBundleURLSchemes) pelo nome do aplicativo que você escolheu na etapa 1. Você também pode fazer essas alterações no editor de plist: clique no arquivoAppName-Info.plist
no XCode para abrir o editor de plist.Substitua a cadeia de caracteres
com.microsoft.azure.zumo
para CFBundleURLName pelo identificador do pacote Apple.Pressione Executar para iniciar o aplicativo e faça logon. Após ter feito o logon você poderá exibir a lista de Tarefas pendentes e fazer atualizações.
Swift:
No Mac, abra ToDoTableViewController.swift no Xcode e adicione o seguinte método:
func loginAndGetData() { guard let client = self.table?.client, client.currentUser == nil else { return } let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.todoTableViewController = self let loginBlock: MSClientLoginBlock = {(user, error) -> Void in if (error != nil) { print("Error: \(error?.localizedDescription)") } else { client.currentUser = user print("User logged in: \(user?.userId)") } } client.login(withProvider:"google", urlScheme: "appname", controller: self, animated: true, completion: loginBlock) }
Altere google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver usando o Google como seu provedor de identidade. Se estiver usando o Facebook, você precisará colocar os domínios do Facebook na lista de permissões de seu aplicativo.
Substitua o urlScheme por um nome exclusivo para seu aplicativo. O urlScheme deve ser o mesmo que o protocolo de esquema de URL especificado no campo URLs de redirecionamento externo permitidas no portal do Azure. O urlScheme é usado pelo retorno de chamada de autenticação a fim de voltar para seu aplicativo depois que a solicitação de autenticação é concluída.
Remova as linhas
self.refreshControl?.beginRefreshing()
eself.onRefresh(self.refreshControl)
ao final deviewDidLoad()
em ToDoTableViewController.swift. Adicione uma chamada paraloginAndGetData()
em seu lugar:loginAndGetData()
Abra o arquivo
AppDelegate.swift
e adicione a seguinte linha à classeAppDelegate
:var todoTableViewController: ToDoTableViewController? func application(_ application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { if url.scheme?.lowercased() == "appname" { return (todoTableViewController!.table?.client.resume(with: url as URL))! } else { return false } }
Substitua o nome do aplicativo pelo valor urlScheme que você usou na etapa 1.
Abra o arquivo
AppName-Info.plist
(substituindo AppName pelo nome de seu aplicativo) e adicione o seguinte código:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.microsoft.azure.zumo</string> <key>CFBundleURLSchemes</key> <array> <string>appname</string> </array> </dict> </array>
Esse código deve ser colocado dentro do elemento
<dict>
. Substitua a cadeia de caracteres appname (dentro da matriz de CFBundleURLSchemes) pelo nome do aplicativo que você escolheu na etapa 1. Você também pode fazer essas alterações no editor de plist: clique no arquivoAppName-Info.plist
no XCode para abrir o editor de plist.Substitua a cadeia de caracteres
com.microsoft.azure.zumo
para CFBundleURLName pelo identificador do pacote Apple.Pressione Executar para iniciar o aplicativo e faça logon. Após ter feito o logon você poderá exibir a lista de Tarefas pendentes e fazer atualizações.
A autenticação do Serviço de Aplicativo usa a comunicação interaplicativos da Apple. Para obter mais detalhes sobre esse assunto, confira a documentação da Apple