Este guia explica como configurar o single sign-on (SSO) para aplicações em uma instância do Alibaba Cloud Service Mesh (ASM).
Pré-requisitos
Você criou uma instância do ASM Enterprise Edition. Para mais informações, consulte Criar uma instância do ASM.
Você criou um cluster gerenciado do ACK. Para mais informações, consulte Criar um cluster gerenciado do ACK.
Você ativou a injeção automática de sidecar para o namespace padrão. Para mais informações, consulte Ativar injeção automática de sidecar.
Informações de contexto
Muitas aplicações exigem controle de acesso e permitem a entrada apenas de usuários autenticados. Com a crescente complexidade dos sistemas, o single sign-on (SSO) tornou-se uma solução eficaz para permitir que os usuários façam login em vários sistemas com uma única conta. O Serviço de Autorização Personalizada no ASM possibilita implementar SSO nas aplicações do mesh sem alterar o código.
Utilizar o ASM para implementar SSO reduz a refatoração de aplicações e os custos de operações e manutenção. Este guia utiliza uma instância do Alibaba Cloud IDaaS como provedor de identidade (IdP) para habilitar o SSO nos serviços do mesh. Em vez de incorporar lógica de autenticação e autorização diretamente nas aplicações, configure o ASM para usar um serviço de autorização personalizada. Esse serviço integra-se ao Alibaba Cloud IDaaS ou a qualquer IdP compatível com OIDC para gerenciar o fluxo de autorização e login. Após a autenticação bem-sucedida, a solicitação e as informações de identidade do usuário são encaminhadas à aplicação, que executa a lógica de negócios com base nessa identidade.
Conceitos
|
Conceito |
Descrição |
|
IdP |
Um provedor de identidade (IdP) é um serviço que cria, mantém e gerencia identidades de usuários, além de fornecer serviços de autenticação. Por exemplo, ao usar uma conta do Google para entrar em uma aplicação de terceiros, o Google atua como o IdP. |
|
OIDC |
OpenID Connect (OIDC) é um protocolo de autenticação construído sobre o framework OAuth 2.0. Para mais informações, consulte OpenID Connect. |
|
Scope |
No OIDC, os scopes definem quais atributos do usuário (como e-mail e informações de perfil) a aplicação tem permissão para acessar. Durante a autenticação, o IdP pode solicitar que o usuário conceda permissão para a aplicação acessar scopes específicos de seus dados. |
Etapa 1: Criar uma instância do IDaaS e um usuário de teste
-
Faça login no console do EIAM e crie uma instância do Alibaba Cloud IDaaS.
NotaUma instância do Alibaba Cloud IDaaS funciona como um sistema de contas autônomo. Criar uma instância equivale a criar um sistema independente de gerenciamento de identidades.
Na página EIAM, clique em no nome da instância do Alibaba Cloud IDaaS.
No painel de navegação à esquerda, escolha .
Na página Account, clique em na aba Account e, em seguida, clique em Create User.
No painel Create User, insira as informações do usuário e clique em OK.
Etapa 2: Adicionar e configurar uma aplicação OIDC
As aplicações na sua instância do Alibaba Cloud IDaaS funcionam como interfaces. A instância do IDaaS pode expor essas interfaces de várias formas para habilitar o SSO. Este guia utiliza uma aplicação OIDC para demonstrar o processo.
No painel de navegação à esquerda do console do EIAM, clique em Application Management.
Na página Application Management, clique em Add Application.
Na página Add Application, clique em na aba Standard Protocols. No cartão OIDC, clique em Add Application.
Na caixa de diálogo Add Application-OIDC, insira um Application Name e clique em Add.
Na página de detalhes da OIDC Application, selecione .
-
Na aba de configuração de SSO, defina os Redirect URIs. Clique em Show Advanced Settings, selecione as informações de usuário a serem obtidas na seção scopes e clique em Save.
No painel de navegação à esquerda, clique em Applications. Selecione a aplicação desejada, clique em na aba Sign-in e acesse a subaba SSO. Os scopes disponíveis incluem
openid,email,phoneeprofile.NotaNeste exemplo, o Redirect URI está definido como
http://{IP_address_of_the_ingress_gateway}/oauth2/callback. Substitua{IP_address_of_the_ingress_gateway}pelo endereço IP real do seu gateway de entrada. Na página de detalhes da OIDC Application, selecione e clique em Authorize.
Na caixa de diálogo Authorize, conceda permissões ao usuário criado na Etapa 1 e clique em Confirm.
Após configurar a aplicação OIDC, anote o Issuer, o client_id e o client_secret. Essas informações serão necessárias para configurar o SSO no ASM.
Issuer: Na sua aplicação OIDC, obtenha este valor em . Issuer: Obtenha este valor na seção Application Configuration Information, na parte inferior da página Login Access > Single Sign-On da sua aplicação OIDC. Este campo serve para verificar a origem da emissão do token e também representa o
baseUrlpara as URLs dos endpoints.client_id e client_secret: Na página de detalhes da aplicação OIDC, encontre esses valores na seção General.
Etapa 3: Implantar e expor a aplicação de teste
Este guia utiliza a aplicação httpbin para testes. Essa aplicação ajuda a inspecionar detalhes das solicitações, o que simplifica a verificação das informações obtidas do IdP após um login bem-sucedido.
-
Use o YAML a seguir para implantar a aplicação httpbin no namespace
defaultdo seu cluster ACK. -
Use o YAML a seguir para configurar um recurso Gateway para sua instância do ASM. Para mais informações, consulte Gerenciar gateways do Istio.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingressgateway namespace: istio-system spec: selector: app: istio-ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP -
Use o YAML a seguir para aplicar um serviço virtual à sua instância do ASM. Para mais informações, consulte Gerenciar serviços virtuais.
Este serviço virtual define uma rota padrão para a aplicação httpbin.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: ingressgateway-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - name: default route: - destination: host: httpbin.default.svc.cluster.local port: number: 8000 -
Após configurar o Gateway e o serviço virtual, acesse o serviço httpbin executando o comando
curl -I http://{IP_address_of_the_ingress_gateway}:80.Saída de exemplo:
curl -I http://{IP_address_of_the_ingress_gateway}:80 HTTP/1.1 200 OK server: istio-envoy date: Fri, 19 Aug 2022 07:39:58 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 3
Etapa 4: Ativar autorização personalizada e configurar SSO OIDC
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha . Na página exibida, clique em Define Custom Authorization Service.
-
Na página Define External Authorization Service, clique em na aba OIDC Authz and Authn Service, configure os parâmetros e clique em Create.
NotaUtilize as informações da aplicação OIDC obtidas na Etapa 2. Use o endereço IP do gateway de entrada como URI de redirecionamento para logins. Para mais informações sobre secrets de cookie, consulte Generating a Cookie Secret.
-
Use o KubeConfig do cluster do plano de dados para executar o seguinte comando e obter o nome de domínio do serviço de autorização externa OIDC.
kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}' -
Use o YAML a seguir para criar um serviço virtual que receba solicitações de autenticação do gateway de entrada.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: oauth2-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - match: - uri: prefix: /oauth2 name: oauth2 route: - destination: host: # The domain name of the external authorization service obtained in the previous step. port: number: 4180ImportantePara evitar conflitos, não crie outros serviços virtuais que correspondam ao prefixo de caminho
/oauth2.
Etapa 5: Criar uma política de autorização
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
Na página Create, selecione um Namespaces e um Scenario Template. Insira o YAML a seguir e clique em Create.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: oidc namespace: istio-system spec: action: CUSTOM provider: name: httpextauth-oidc # The name of the custom authorization service created in the previous step. rules: - {} selector: matchLabels: istio: ingressgatewayNotaEsta política de autorização aplica-se a todas as solicitações enviadas ao gateway de entrada.
Etapa 6: Verificar o resultado
-
Em um navegador web, acesse http://{IP_address_of_the_ingress_gateway}:80.
A página de login do OAuth2 Proxy aparece, contendo um botão Sign in with OpenID Connect. Isso indica que o OAuth2 Proxy foi implantado e integrado com sucesso ao OpenID Connect, e que o SSO está ativo.
-
Clique em Sign in with OpenID Connect.
Resultado esperado: A página de login do Alibaba Cloud IDaaS aparece. A página contém campos de entrada para Account name, mobile number, or email e Password, além de um botão Log On. Isso confirma que a configuração de SSO OIDC está funcionando.
-
Na página de login do Alibaba Cloud IDaaS, insira as credenciais do usuário de teste criado na Etapa 1 e clique em Log On.
Resultado esperado: Após fazer login com sucesso, a página de documentação da API Swagger do httpbin.org aparece na versão 0.9.2. A página exibe a descrição do serviço, "A simple HTTP Request & Response Service," e lista grupos de APIs como HTTP Methods, Auth, Status codes e Request inspection. Isso confirma que a configuração de SSO do Alibaba Cloud IDaaS é válida.
-
Clique em Request inspection, depois escolha /headers > Try it out > Execute.
Resultado esperado: Após executar a solicitação, o servidor retorna um código de status
200 OK. O corpo da resposta inclui um campoAuthorizationque contém um JWT Bearer, indicando que a autorização JWT está funcionando.{ "headers": { "Accept": "application/json", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Authorization": "Bearer eyJraWQiOiJLRVkxM3d0ekhLSmdEbkFmd1lQR0RqemM5RFUzTkwSNXd1S0wiLC3hbGciOiJSUzI1NiJ9.eyJzdWIiOiJlc2VyVyX29xemw3Z3FQb2lrb2xtNG9xY29mMndlcGhtIiwinRpi-joiand0X2FhYWFkYXZ2aG12Y2JpdDRnbDVsNGNudDR5d2FwZDI3cnFkd2Z0eDI3cnFkZTByc2FtcnFkd2Z0ZDI3cnFkZTByc2FtIixxx.xxxb51hcGktY24taGFuZ3pobxxx.xxxMuY29xxx.3yiL2xxx.Fx3R1bjI1b3NkbG16Nmd0cWZxM2oycHpwZWZx-L2FwcF9tbDV0emFwc2w3em1mbzUzd2xxx.xxxaGFzaCI6IkUxcm9oRnlpR2FZYmJnTS.xxxtudHZpIiwiYXRf-IrODYgMTg2IDkxNzEgMjQ5MS.xxx.xxx.BanFbeM28p\nYp-aiEymtvy-QC-6VjohuSSi.xxx\nE9c3RTMntC66D7fxTGME2x.xxx.Et\nrwPRUTM-2AF74y2NVFtpNdkxbLenyz1duwTpeGANmgLGxxxJrZvKyNxBjAV6TZjGrUVVNICbU1_sg", "...": "..." } } -
Copie o JWT do token Bearer da etapa anterior e analise-o com um depurador de JWT.
Para mais informações, consulte JWT.io.
Resultado esperado: O JWT analisado mostra que o
algno HEADER éRS256. O PAYLOAD contém claims padrão do ID Token OIDC, comosub,jti,iss(que é o endpoint OIDC da sua instância EIAM),iat,nbf,exp,aud,at_hash,c_hash,email,email_verified,phone_number,phone_number_verified,name,preferred_usernameeupdated_at. Isso confirma que o JWT contém as informações do usuário do Alibaba Cloud IDaaS e que o ASM o validou com sucesso.