Prova de conceito de funcionalidade SSO Microsoft/Google
Node v20.17.0
Angular 18
Gradle 8.10.1
Cordova 12.0.0 (cordova-lib@12.0.1)
"@azure/msal-angular": "^3.0.23",
"@azure/msal-browser": "^3.23.0",
ionic start Selecionar Angular Defina o nome do projeto
ionic serve
https://console.cloud.google.com/ Será necessário antes da criação da credencial preencher a tela de consentimento com alguns dados são eles; -Preencher com os dados da aplicação -Inserir e-mail de suporte -Liberar o escopo de visualização -Depois das etapas acima publicar o app para produção!
Em API's & Serviços>Credenciais>Criar uma nova credencial OAuth ClientId Selecionar o tipo de aplicação -> Android Para extrair a informação do SHA-1 utilizei o comando abaixo, funcional no git-bash:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Copiar o endereço do ClientID
ionic g pages login
{
path: '',
redirectTo: 'login',
pathMatch: 'full' // Redireciona para a página de login quando a rota é vazia
},
<ion-button expand="full" (click)="loginWithGoogle()">
<ion-icon name="logo-google"></ion-icon>
Login com Google
</ion-button>
async loginWithGoogle(){
this.user = await this.authService.googleSignIn()
console.log(this.user)
if(this.user){
this.router.navigate(['/home'])
}
}
ionic g service service/auth
npm i --save @codetrix-studio/capacitor-google-auth
Para sincronizar as mudanças feitas no código-fonte web (pasta www) ou nas configurações do projeto (como capacitor.config.json) com as plataformas nativas (Android, iOS).
npx cap update
ionic capacitor copy android
npx cap open android
import { Injectable } from '@angular/core';
import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
import { Platform, isPlatform } from '@ionic/angular';
@Injectable({
providedIn: 'root'
})
export class AuthService {
user:any
constructor(private platform:Platform) {
if(!isPlatform('capacitor')){
GoogleAuth.initialize()
}
this.platform.ready().then(()=>{
GoogleAuth.initialize()
})
}
async googleSignIn() {
this.user = await GoogleAuth.signIn();
return await this.user;
}
}
plugins: {
GoogleAuth: {
scopes: ['profile', 'email'],
serverClientId: '446483931548-lbcv2a5409vsp068ci9oss5mtr67atva.apps.googleusercontent.com',
forceCodeForRefreshToken: true,
},
},
<meta name="google-signin-client_id" content="446483931548-lbcv2a5409vsp068ci9oss5mtr67atva.apps.googleusercontent.com" />
<meta name="google-signin-scope" content="profile email" />
ionic cap add android
package io.ionic.starter;
import android.os.Bundle;
import com.getcapacitor.BridgeActivity;
import com.codetrixstudio.capacitor.GoogleAuth.GoogleAuth;
import com.getcapacitor.BridgeActivity;
public class MainActivity extends BridgeActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
registerPlugin(GoogleAuth.class);
}
}
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="app_name">sso</string>
<string name="title_activity_main">sso</string>
<string name="package_name">io.ionic.starter</string>
<string name="custom_url_scheme">io.ionic.starter</string>
<string name="server_client_id">446483931548-lbcv2a5409vsp068ci9oss5mtr67atva.apps.googleusercontent.com</string>
</resources>
Nome projeto: Single Sign-on
Client ID web: 446483931548-lbcv2a5409vsp068ci9oss5mtr67atva.apps.googleusercontent.com
Fonte: https://www.npmjs.com/package/@codetrix-studio/capacitor-google-auth
Vídeos: How to add Google SignIn to your Ionic 7 App https://www.youtube.com/watch?v=_BmbLZdJks8
How to add Google Sign In using Capacitor to your Ionic App https://www.youtube.com/watch?v=GwtpoWZ_78E