Adicionar autenticação à sua aplicação iOS
Neste tutorial, vai adicionar autenticação ao projeto de início rápido do iOS com um fornecedor de identidade suportado. Este tutorial baseia-se no tutorial de início rápido do iOS , que tem de concluir primeiro.
Registe a sua aplicação para autenticação e configure o Serviço de Aplicações
Primeiro, tem de registar a sua aplicação no site de um fornecedor de identidade e, em seguida, irá definir as credenciais geradas pelo fornecedor no back-end das Aplicações Móveis.
Configure o seu fornecedor de identidade preferencial ao seguir as instruções específicas do fornecedor:
Repita os passos anteriores para cada fornecedor que pretende suportar na sua aplicação.
Adicionar a sua aplicação aos URLs de Redirecionamento Externo Permitidos
A autenticação segura requer que defina um novo esquema de URL para a sua aplicação. Isto permite que o sistema de autenticação redirecione novamente para a sua aplicação assim que o processo de autenticação estiver concluído. Neste tutorial, utilizamos o nome da aplicação do esquema de URL. No entanto, pode utilizar qualquer esquema de URL que escolher. Deve ser exclusivo para a sua aplicação móvel. Para ativar o redirecionamento no lado do servidor:
No portal do Azure, selecione o seu Serviço de Aplicações.
Clique na opção de menu Autenticação/Autorização .
Clique em Azure Active Directory na secção Fornecedores de Autenticação .
Defina o Modo de gestão como Avançado.
Nos URLs de Redirecionamento Externo Permitidos, introduza
appname://easyauth.callback
. O nome da aplicação nesta cadeia é o Esquema de URL da sua aplicação móvel. Deve seguir a especificação de URL normal para um protocolo (utilizar apenas letras e números e começar com uma letra). Deve tomar nota da cadeia que escolher, pois terá de ajustar o código da aplicação móvel com o Esquema de URL em vários locais.Clique em OK.
Clique em Guardar.
Restringir permissões a utilizadores autenticados
Por predefinição, as APIs num back-end das Aplicações Móveis podem ser invocadas anonimamente. Em seguida, tem de restringir o acesso apenas a clientes autenticados.
Node.js back-end (através do portal do Azure) :
Nas suas definições de Aplicações Móveis, clique em Tabelas Fáceis e selecione a sua tabela. Clique em Alterar permissões, selecione Acesso autenticado apenas para todas as permissões e, em seguida, clique em Guardar.
Back-end do .NET (C#):
No projeto do servidor, navegue para Controllers>TodoItemController.cs. Adicione o
[Authorize]
atributo à classe TodoItemController , da seguinte forma. Para restringir o acesso apenas a métodos específicos, também pode aplicar este atributo apenas a esses métodos em vez da classe. Voltar a publicar o projeto do servidor.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js back-end (através do código Node.js) :
Para exigir a autenticação para o acesso à tabela, adicione a seguinte linha ao script do servidor Node.js:
table.access = 'authenticated';
Para obter mais detalhes, veja How to: Require authentication for access to tables (Como: Exigir autenticação para aceder a tabelas). Para saber como transferir o projeto de código de início rápido a partir do seu site, consulte Como: Transferir o projeto de código de início rápido de back-end Node.js com o Git.
No Xcode, prima Executar para iniciar a aplicação. É gerada uma exceção porque a aplicação tenta aceder ao back-end como um utilizador não autenticado, mas a tabela TodoItem necessita agora de autenticação.
Adicionar autenticação à aplicação
Objective-C:
No seu 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 o google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver a utilizar o Google como fornecedor de identidade. Se utilizar o Facebook, tem de permitir a lista de domínios do Facebook na sua aplicação.
Substitua o urlScheme por um nome exclusivo para a sua aplicação. O urlScheme deve ser o mesmo que o protocolo esquema de URL que especificou no campo URLs de Redirecionamento Externo Permitidos no portal do Azure. O urlScheme é utilizado pela chamada de retorno de autenticação para voltar à sua aplicação após a conclusão do pedido de autenticação.
Substitua
[self refresh]
no QSTodoListViewController.m pelo seguinteviewDidLoad
código:[self loginAndGetData];
Abra o ficheiro
QSAppDelegate.h
e adicione-o ao seguinte código:#import "QSTodoService.h" @property (strong, nonatomic) QSTodoService *qsTodoService;
Abra o ficheiro
QSAppDelegate.m
e adicione-o ao 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 este código diretamente antes da leitura
#pragma mark - Core Data stack
da linha . Substitua o nome da aplicação pelo valor urlScheme que utilizou no passo 1.Abra o
AppName-Info.plist
ficheiro (substituindo AppName pelo nome da sua aplicação) 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>
Este código deve ser colocado dentro do
<dict>
elemento. Substitua a cadeia appname (na matriz para CFBundleURLSchemes) pelo nome da aplicação que escolheu no passo 1. Também pode fazer estas alterações no editor plist - clique noAppName-Info.plist
ficheiro no XCode para abrir o editor plist.Substitua a
com.microsoft.azure.zumo
cadeia para CFBundleURLName pelo identificador do pacote da Apple.Prima Executar para iniciar a aplicação e, em seguida, inicie sessão. Quando tiver sessão iniciada, deverá conseguir ver a lista Todo e efetuar atualizações.
Swift:
No seu 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 o google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver a utilizar o Google como fornecedor de identidade. Se utilizar o Facebook, tem de colocar os domínios do Facebook na lista de permissões na sua aplicação.
Substitua o urlScheme por um nome exclusivo para a sua aplicação. O urlScheme deve ser o mesmo que o protocolo esquema de URL que especificou no campo URLs de Redirecionamento Externo Permitidos no portal do Azure. O urlScheme é utilizado pela chamada de retorno de autenticação para voltar à sua aplicação após a conclusão do pedido de autenticação.
Remova as linhas
self.refreshControl?.beginRefreshing()
eself.onRefresh(self.refreshControl)
, no final deviewDidLoad()
toDoTableViewController.swift. Adicione uma chamada ao respetivologinAndGetData()
local:loginAndGetData()
Abra o
AppDelegate.swift
ficheiro e adicione a seguinte linha àAppDelegate
classe: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 da aplicação pelo valor urlScheme que utilizou no passo 1.
Abra o
AppName-Info.plist
ficheiro (substituindo AppName pelo nome da sua aplicação) 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>
Este código deve ser colocado dentro do
<dict>
elemento. Substitua a cadeia appname (na matriz para CFBundleURLSchemes) pelo nome da aplicação que escolheu no passo 1. Também pode fazer estas alterações no editor plist - clique noAppName-Info.plist
ficheiro no XCode para abrir o editor plist.Substitua a
com.microsoft.azure.zumo
cadeia para CFBundleURLName pelo identificador do pacote da Apple.Prima Executar para iniciar a aplicação e, em seguida, inicie sessão. Quando tiver sessão iniciada, deverá conseguir ver a lista Todo e efetuar atualizações.
Serviço de Aplicações Authentication utiliza a Apples Inter-App Communication. Para obter mais detalhes sobre este assunto, consulte a Documentação da Apple