Aplicativos de back-end

É possível usar os SDKs e as APIs do IBM Cloud® App ID para proteger os terminais e as APIs do aplicativo back-end.

Entendendo o fluxo

Parte do desenvolvimento dos aplicativos back-end é verificar se suas APIs estão protegidas contra acesso não autorizado. Os SDKs do App ID ajudam você a proteger seus terminais de API e garantem a segurança do seu aplicativo.

Qual é a base técnica do fluxo?

App ID implementa a especificação OAuth 2.0 e a especificação OIDC, que usa tokens de portador para autenticação e autorização. Esses tokens são formatados como JSON Web Tokens, que são assinados digitalmente e contêm declarações que descrevem o sujeito que está sendo autenticado e o provedor de identidade. As APIs de seu aplicativo são protegidas pelos tokens de acesso e de identidade. Clientes que precisam deacesso às suas APIs podem se autenticar com o provedor de identidade por meio do App ID em troca desses tokens. As solicitações nos tokens devem ser validadas para conceder acesso às APIs protegidas.

Para obter mais informações sobre como os tokens são usados no App ID, consulte Entendendo os tokens.

Qual é a aparência desse fluxo?

caption-side=bottom"
App ID fluxo de backend Fluxo de aplicativos de backend

  1. Um cliente faz uma solicitação de POST para o servidor de autorizações do App ID para obter um token de acesso. Uma solicitação de POST geralmente tem o seguinte formato:

    POST /oauth/v4/<tenantID>/token HTTP/1.1
    Content_type: application/x-www-form-urlencoded
    Authorization header = "Basic" + base64encode(<clientID>:<secret>)
    FormData = <grantType>
    
  2. Se o cliente atender às qualificações, o servidor de autorizações retornará um token de acesso.

  3. O cliente envia uma solicitação para o recurso protegido. As solicitações podem ser enviadas de várias maneiras, dependendo de qual biblioteca do cliente HTTP você está usando, mas uma solicitação geralmente tem o formato a seguir:

    curl -H 'Authorization: Bearer <accessToken>'
    <https://my-protected-resource.com>
    
  4. O recurso protegido ou a API valida o token. Se o token for válido, o acesso ao recurso será concedido para o cliente. Se o token não puder ser validado, o acesso será negado.

Para obter informações sobre como configurar seu aplicativo para usar Liberty for Java, consulte o Iniciação rápida: tutorial de aplicativos de back-end do Liberty for Java.

Protegendo os recursos usando o SDK do Node.js

É possível usar os SDKs do App ID para impor a autenticação e a autorização para os aplicativos do lado do servidor. O ApiStrategy funciona para proteger os recursos de back-end requerendo que os tokens de acesso e de identidade sejam validados como parte da solicitação. O SDK do App ID Node.js funciona com a estrutura do Passport.

Verifique o vídeo a seguir para aprender sobre como proteger aplicativos de Nó de back-end com o App ID. Em seguida, experimente você mesmo usando um simples aplicativo de amostra Node.

Antes de Iniciar

Antes de começar a usar o SDK do Node.js, deve-se ter os pré-requisitos a seguir.

  • Uma instância do App ID
  • NPM versão 4 ou superior
  • Node versão 6 ou superior

Instalando o SDK do Node.js

  1. Inclua o SDK do Node.js do App ID no arquivo package.json do aplicativo.

    "dependencies": {
       "ibmcloud-appid": "^7.0.0"
    }
    
  2. Execute o seguinte comando.

    npm install
    

Inicializando o SDK do Node.js

  1. Obtenha o seu oauth server url.

    1. Navegue para a guia Credenciais de serviço do painel do App ID.
    2. Se você ainda não tiver um conjunto de credenciais, clique em Nova credencial e, em seguida, clique em Incluir para criar um novo conjunto. Sevocê fizer isso, ignore essa etapa.
    3. Clique na alternância Visualizar credenciais para ver suas informações.
    4. Copie o seu oauth server url para usar na próxima etapa.
  2. Inicialize a estratégia de passaporte do App ID, conforme mostrado no exemplo a seguir.

    var express = require('express'); 
    var passport = require('passport');
    var APIStrategy = require('ibmcloud-appid').APIStrategy; 
    passport.use(new APIStrategy({ oauthServerUrl: "<oauthServerUrl>" })); 
    var app = express();
    app.use(passport.initialize());
    

Protegendo a API com a API Strategy

O fragmento a seguir demonstra como usar o ApiStrategy em um aplicativo Express para proteger a API GET /protected.

Se o aplicativo Node.js for executado no IBM Cloud e estiver ligado à sua instância do App ID, não será necessário fornecer a configuração de estratégia da API. A configuração App ID obtém as informações usando a variável de ambiente VCAP_SERVICES.

 app.get('/protected_resource', passport.authenticate('APIStrategy.STRATEGY_NAME', { session: false }), function(request, response){
   console.log("Security context", request.appIdAuthorizationContext);
   response.send(200, "Success!");
   }
);

Quando os tokens são válidos, o próximo middleware na cadeia de solicitação é chamado e a propriedade appIdAuthorizationContext é incluída no objeto de solicitação. A propriedade contém os tokens de acesso e de identidade originais e as informações de carga útil decodificadas dos tokens.

Protegendo os recursos usando o SDK do Swift

O SDK do lado do servidor do App ID fornece um plug-in de middleware de proteção de API que é usado para proteger seus aplicativos de back-end. Associando suas APIs ao middleware, é possível proteger seu app contra acesso não autorizado. Após a API ser protegida, o middleware assegura que os tokens gerados pelo App ID sejam validados. Em seguida, é possível modificar o comportamento da API dependendo dos resultados da validação.

import Foundation
import Kitura              // server
import Credentials         // middleware
import IBMCloudAppID       // SDK

// setup routes
let router = Router()

// mandatory option to be passed in if app not deployed on IBM Cloud
let options = [
    "oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/d8438de6-c325-4956-ad34-abd49194affd",
]
let apiCreds = Credentials()

// Minimum macOS version required
if #available(OSX 10.12, *) {

    // setup API protection
    let apiKituraCredentialsPlugin = APIKituraCredentialsPlugin(options: options)
    apiCreds.register(plugin: apiKituraCredentialsPlugin)

    // associate route with API protection
    router.all(middleware: apiCreds)

    // create protected API
    router.get("/protectedendpoint") { request, response, next in

        response.headers["Content-Type"] = "text/html; charset=utf-8"
        do {
            if let userProfile = request.userProfile  {
                try response.status(.OK).send(
                    "<!DOCTYPE html><html><body>" +
                        "Welcome " + userProfile.displayName  +
                        "! You are logged in with " + userProfile.provider + "." +
                    "</body></html>\n\n").end()
                next()
                return
            }
            try response.status(.unauthorized).send(
                "<!DOCTYPE html><html><body>” + “You are not authorized!" +
                "</body></html>\n\n").end()
        }
        catch {}
        next()
    }

    // Start server
    Kitura.addHTTPServer(onPort: 8090, with: router)

    Kitura.run()  
}

Protegendo recursos manualmente

Para assegurar seus apps de back-end e os recursos protegidos, é necessário validar um token. Quando um cliente envia uma solicitação para o seu recurso, é possível verificar se o token atende às especificações definidas. O token pode incluir a identificação de informações, o escopo ou qualquer outra configuração que você tenha estabelecida. É possível validar ostokens de identidade e de acesso do App ID de várias maneiras. Para obter ajuda, efetue o registro de saída de Validação de tokens.

Próximas etapas

Com o App ID instalado em seu aplicativo, você está quase pronto para começar a autenticar os usuários! Tente executar uma das atividades a seguir em seguida: