SAML

Se você estiver usando um provedor de identidade baseado em SAML, será possível configurar o App ID para iniciar uma experiência única de conexão (SSO). Nesse tipo de fluxo, o App ID atua como um provedor de serviços e fornece tokens de segurança para seus usuários ativos mensais (MAU).

Entendendo o SAML

O Security Assertion Markup Language (SAML) é um padrão aberto usado para troca de dados de autenticação e autorização entre o provedor que declara uma identidade e um provedor que consome as informações de identidade. SAML 2.0 é baseado em XML e é uma estrutura bem estabelecida para padrões de autenticação e autorização.

O protocolo SAML fornece uma ponte entre o App ID (provedor de serviços) e o seu provedor de identidade. Quando o provedor de identidade autentica um usuário, ele cria tokens SAML que contêm informações sobre o usuário, por exemplo, como eles são autenticados, os atributos que estão associados a eles ou os parâmetros de autorização. Consulte a tabela a seguir para obter exemplos.

Compreensão dos tipos de informações retornadas em um token SAML
Tipo de informações Exemplos
Autenticação Os usuários podem se autenticar com uma senha, usando MFA, ou outra forma.
Atributos Qualquer atributo, como os grupos aos quais eles pertencem ou uma preferência de algum tipo.
Decisões de autorização Ocasionalmente, os usuários podem ter concedidas mais ou menos permissões do que outros.

Qual é a aparência desse fluxo?

Embora a estrutura SAML seja usada para autenticar o usuário, o App ID ainda usa um protocolo OIDC mais moderno para trocar tokens de segurança com seu aplicativo. Verifique a imagem a seguir para ver um fluxo detalhado de informações.

SAML fluxo de autenticação empresarial Como funciona um fluxo de autenticação empresarial
SAML

  1. Um usuário acessa a página de login ou o recurso restrito em seu aplicativo, que inicia uma solicitação para o ponto de extremidade App ID /authorization por meio de um SDK ou API App ID. Se o usuário não estiver autorizado, o fluxo de autenticação começará com um redirecionamento para o App ID.
  2. O App ID gera uma solicitação de autenticação do SAML (AuthNRequest) e o navegador redireciona automaticamente o usuário para o provedor de identidade SAML.
  3. O provedor de identidade analisa a solicitação SAML, autentica o usuário e gera uma resposta SAML com suas asserções.
  4. O provedor de identidade redireciona o usuário e a resposta de volta para o App ID com a resposta SAML.
  5. Se a autenticação for bem-sucedida, o App ID criará tokens de acesso e de identidade que representam a autorização e a autenticação de um usuário e os retornará para o app. Se a autenticação falhar, o App ID retornará o código de erro do provedor de identidade para o app.
  6. O usuário tem acesso concedido ao app ou aos recursos protegidos.

Como a conexão única muda o fluxo?

O fluxo de trabalho para a conexão única é semelhante. O único desvio em relação ao fluxo de trabalho descrito está na etapa 3 da seção anterior. Com a conexão única ativada, antes que um usuário seja solicitado a autenticar, o provedor de identidade verifica se ele já tem uma sessão de autenticação estabelecida. Se sim, o usuário não é solicitado a autenticar e o fluxo continua normalmente. Se uma sessão de conexão única estiver indisponível, o usuário será redirecionado para um log na página. Ele também poderá ser redirecionado se o seu provedor de identidade não puder corresponder aos requisitos de autenticação definidos na solicitação do App ID quanto ao que ele usa para estabelecer a conexão única. Por exemplo, se o seu provedor de identidade estabelece uma sessão de conexão única do usuário usando a biometria, a autenticação padrão do App ID deverá ser mudada. Por padrão, o App ID espera que os usuários sejam autenticados por senha por meio de HTTPS: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport.

Entendendo as asserções

Quando a asserção SAML é retornada ao App ID, o serviço federa a identidade do usuário e gera os tokens apropriados. Se a asserção SAML corresponder àquela das solicitações de OIDC padrão, ela será automaticamente incluída no token de identidade. As asserções que não têm uma correspondência são ignoradas por padrão. Se seu provedor SAML retornar outras asserções, será possível configurar App ID para injetar as informações em seus tokens. No entanto, não adicione mais informações do que o necessário aos seus tokens, pois eles geralmente são enviados em cabeçalhos HTTP e são limitados.

O OIDC padrão solicita ao App ID que tente mapear para a sua asserção:

  • name
  • email
  • locale
  • picture

Se um ou mais desses valores forem mudados no lado do provedor de identidade, os novos valores estarão disponíveis após o usuário efetuar login novamente.

Como o App ID espera que uma asserção SAML se pareça?

O serviço espera que uma asserção SAML se pareça ao exemplo a seguir.

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s2202bbbbafa9d270d1c15990b738f4ab36139d463" InResponseTo="_e4a78780-35da-012e-8ea7-0050569200d8" Version="2.0" IssueInstant="2011-03-21T11:22:02Z" Destination="https://example.example.com/">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">idp_entityId</saml:Issuer>
  <samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <samlp:StatusCode  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0" ID="pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89" IssueInstant="2018-01-29T13:02:58Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer>idp_entityId</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="one_of_supported_algo"/>
        <ds:SignatureMethod Algorithm="one_of_supported_algo"/>
        <ds:Reference URI="#pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89">
          <ds:Transforms>
            <ds:Transform Algorithm="one_of_supported_algo"/>
            <ds:Transform Algorithm="one_of_supported_algo"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="one_of_supported_algo"/>
          <ds:DigestValue>huywDPPfOEGyyzE7d5hjOG97p7FDdGrjoSfes6RB19g=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
 <ds:SignatureValue>BAwNZFgWF2oxD1ux0WPfeHnzL+IWYqGhkM9DD28nI9v8XtPN8tqmIb5y4bomaYknmNpWYn7TgNO2Rn/XOq+N9fTZXO2RybaC49iF+zWibRIcNwFKCCpDL6H6jA5eqJX2YKBR+K6Yt2JPoUIRLmqdgm2lMr4Nwq1KYcSzQ/yoV5W0SN/V5t8EfctFoaXVPdtfHVXkwqHeufo+L4gobFt9NRTzXB0SQEClA1L8hQ+/LhY4l46k1D0c34iWjVLZr+ecQyubf7rekOG/R7DjWCFMTke822dR+eJTPWFsHGSPWCDDHFYqB4QMinTvUnsngjY3AssPqIOjeUxjL3p+GXn8IQ==</ds:SignatureValue>
    </ds:Signature>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">JohnDoe@gmail.com</saml:NameID>
    </saml:Subject>
    <saml:Conditions NotBefore="2018-01-29T12:59:58Z" NotOnOrAfter="2018-01-29T13:05:58Z">
    </saml:Conditions>
</samlp:Response>

Quais tipos de algoritmos são suportados pelo App ID?

App ID usa o algoritmo RSA-SHA256 para processar assinaturas digitais XML.

Configurando provedores de identidade da SAML para trabalhar com o App ID

Você pode configurar os provedores de identidade SAML para trabalhar com App ID, fornecendo metadados de App ID para o seu provedor de identidade e metadados do seu provedor de identidade para App ID.

Fornecendo metadados para seu provedor de identidade

Para configurar seu app, você precisa fornecer informações para um provedor de identidade compatível com SAML. As informações são trocadas por meio de um arquivo XML de metadados que também contém dados de configuração que são usados para estabelecer confiança.

Não é possível ativar o SAML até depois de configurá-lo como um provedor de identidade.

  1. Na guia Gerenciar do painel do App ID, clique em Editar na linha SAML para definir as suas configurações.

  2. Clique em Fazer download do arquivo de metadados do SAML. Seu provedor de identidade espera as informações a seguir do arquivo.

    As informações encontradas em seu arquivo de metadados
    Variável Descrição
    EntityID O identificador que permite que o provedor de identidade saiba que o App ID emitiu a solicitação de SAML.
    Location URL O local para o qual o provedor de identidade envia as asserções SAML após autenticar com êxito um usuário.
    Binding As instruções sobre como o provedor de identidade deve enviar a resposta de SAML.
    NameID Format Como o provedor de identidade sabe qual formato de identificador precisa enviar no assunto de uma afirmação e como o App ID identifica os usuários. O ID deve ter o seguinte formato: &lt;saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"&gt;.
    WantAssertionsSigned O modo que um provedor de identidade verifica se precisa assinar a asserção. O serviço espera que a asserção seja assinada, mas não suporta asserções criptografadas.
    KeyDescriptor Os certificados de assinatura e criptografia SAML que podem ser usados para configurar o provedor de identidade para verificar a solicitação SAML assinada e criptografar a resposta.
  3. Forneça os dados para seu provedor de identidade. Se seu provedor de identidade suporta upload do arquivo de metadados, é possível fazer isso. Se não, configure as propriedades manualmente. Nem todo provedor de identidade usa as mesmas propriedades, portanto, você pode não usar todas elas.

    Os nomes da propriedade podem diferir entre os provedores de identidade.

  4. Alterne Federação SAML 2.0 para Ativado.

Fornecendo metadados para o App ID

É possível obter dados de seu provedor de identidade e fornecê-los para o App ID. É possível iniciar o login em seus aplicativos a partir do IBM Cloud ou de seu provedor de identidade..

Fornecimento de metadados no console

Para efetuar login em seus aplicativos da IU do IBM Cloud, siga estas etapas.

  1. Navegue para a guia SAML 2.0 do painel App ID.

  2. Inclua o Nome do provedor O nome padrão é SAML.

  3. Insira os metadados a seguir obtidos a partir do provedor de identidade na seção Fornecer Metadados da SAML IdP.

    As informações que devem ser fornecidas para App ID
    Variável Descrição
    Sign-in URL A URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML.
    Entity ID O nome globalmente exclusivo para um provedor de identidade SAML.
    Primary certificate O certificado emitido por seu provedor de identidade SAML. Ele é usado para assinar e validar asserções SAML. Todos os provedores são diferentes, mas você pode ser capaz de fazer download do certificado de assinatura do seu provedor de identidade. O certificado deve estar no formato .pem.
  4. Opcional: forneça um Certificado secundário que é usado se a validação da assinatura falha no certificado primário. Se a chave de assinatura permanece a mesma, o App ID não bloqueia a autenticação para certificados expirados.

  5. Clique em Salvar.

Deseja configurar um contexto de autenticação? É possível fazer isso por meio da API.

Configuração do login IdP-initiated no console

Opcionalmente, se você quiser fazer login em seus aplicativos no IBM Cloud a partir da interface do usuário do seu provedor de identidade, poderá ativar o login IdP-initiated.

Siga as etapas 1 a 4 na seção Fornecimento de metadados no console. Em seguida, conclua o seguinte processo.

  1. Ative o IdP login iniciado.
  2. Digite o redirecionamento IdP URL.
  3. Clique em Salvar.

Fornecendo Metadados com a API

  1. Veja sua configuração atual do SAML, incluindo o contexto de autenticação e os certificados, fazendo uma solicitação GET para o ponto de extremidade da API /saml.

    Código de exemplo:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Saída de exemplo:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Crie sua configuração SAML substituindo os valores no exemplo a seguir pelas informações de seu provedor. Os valores que são mostrados no exemplo são necessários, mas é possível optar por incluir mais informações, como mostrado na tabela.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"}
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variáveis de configuração
    Variável Descrição
    signInUrl A URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML.
    entityID O nome globalmente exclusivo para um provedor de identidade SAML.
    displayName O nome designado à sua configuração SAML.
    primary-certificate-example-pem-format O certificado emitido por seu provedor de identidade SAML. Ele é usado para assinar e validar asserções SAML. Todos os provedores são diferentes, mas você pode ser capaz de fazer download do certificado de assinatura do seu provedor de identidade. O certificado deve estar no formato .pem.
    Opcional: secondary-certificate-example-pem-format O certificado de backup que é emitido por seu provedor de identidade SAML. Ele será usado se a validação de assinatura falhar com o certificado primário. Nota: se a chave de assinatura permanecer a mesma, o App ID não bloqueará a autenticação para certificados expirados.
    Opcional: authnContext O contexto de autenticação é usado para verificar a qualidade das asserções de autenticação e SAML. É possível incluir um contexto de autenticação, incluindo uma matriz de classe e uma sequência de comparação no código. Certifique-se de atualizar os parâmetros class e comparison com seus valores. Por exemplo, um parâmetro class pode parecer semelhante a urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Opcional: signRequest O sinalizador signRequest fornece a capacidade de enviar uma solicitação SAML assinada para um provedor de identidade que é assinado usando a chave privada de assinatura SAML do locatário. Para configurar seu provedor de identidade SAML para receber uma solicitação assinada, é necessário o certificado de assinatura do arquivo de metadados que pode ser transferido por download no campo KeyDescriptor use="signing". Por padrão, a assinatura de solicitação é configurada como off.
    Opcional: encryptResponse O sinalizador encryptResponse permite que você receba uma resposta criptografada de seu provedor de identidade como parte da solicitação de autenticação. Para configurar seu provedor de identidade SAML para enviar uma resposta criptografada, é necessário o certificado de criptografia que pode ser localizado no arquivo de metadados no campo KeyDescriptor use="encryption". Por padrão, a criptografia de resposta é configurada como off.
  3. Faça uma solicitação PUT para o endpoint da API /saml para fornecer a configuração que você criou na etapa 2 para App ID. Verifique o exemplo a seguir para ver como sua solicitação pode parecer.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "primary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       }
    }
    

Configuração do login IdP-initiated com a API

Para configurar o login IdP-initiated, conclua as etapas a seguir.

  1. Veja sua configuração atual do SAML, incluindo o contexto de autenticação e os certificados, fazendo uma solicitação GET para o ponto de extremidade da API /saml.

    Código de exemplo:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Saída de exemplo:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Crie sua configuração SAML substituindo os valores no exemplo a seguir pelas informações de seu provedor. Os valores que são mostrados no exemplo são necessários, mas é possível optar por incluir mais informações, como mostrado na tabela.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"
       },
       "idpInitEnabled": true,
       "idpRedirectUrl": "https://example.com/redirect/endpoint",
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variáveis de configuração
    Variável Descrição
    signInUrl A URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML.
    entityID O nome globalmente exclusivo para um provedor de identidade SAML.
    displayName O nome designado à sua configuração SAML.
    primary-certificate-example-pem-format O certificado emitido por seu provedor de identidade SAML. Ele é usado para assinar e validar asserções SAML. Todos os provedores são diferentes, mas você pode ser capaz de fazer download do certificado de assinatura do seu provedor de identidade. O certificado deve estar no formato .pem.
    DefaultRelayState O valor inicial para RelayState. Essa variável é definida nas configurações do provedor de identidade. Essa variável pode ser usada para o redirecionamento URL em vez de idpRedirectUrl durante as solicitações SAML do seu provedor de identidade. Se você configurar ambas as variáveis, o valor de DefaultRelayState terá precedência. IdP-initiated o login falhará se você não definir uma dessas variáveis.
    idpInitEnabled Um booleano para indicar se você deseja ativar o login iniciado pelo IdP
    idpRedirectUrl O valor desse campo pode ser null, uma cadeia de caracteres vazia ou um redirecionamento http ou https válido URL. Observação: se o valor desse campo for nulo, você deverá definir o endereço DefaultRelayState como o redirecionamento URL. Se você configurar ambas as variáveis, o valor de DefaultRelayState terá precedência. IdP-initiated o login falhará se você não definir uma dessas variáveis.
    Opcional: secondary-certificate-example-pem-format O certificado de backup que é emitido por seu provedor de identidade SAML. Ele será usado se a validação de assinatura falhar com o certificado primário. Nota: se a chave de assinatura permanecer a mesma, o App ID não bloqueará a autenticação para certificados expirados.
    Opcional: authnContext O contexto de autenticação é usado para verificar a qualidade das asserções de autenticação e SAML. É possível incluir um contexto de autenticação, incluindo uma matriz de classe e uma sequência de comparação no código. Certifique-se de atualizar os parâmetros class e comparison com seus valores. Por exemplo, um parâmetro class pode parecer semelhante a urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Opcional: signRequest O sinalizador signRequest fornece a capacidade de enviar uma solicitação SAML assinada para um provedor de identidade que é assinado usando a chave privada de assinatura SAML do locatário. Para configurar seu provedor de identidade SAML para receber uma solicitação assinada, é necessário o certificado de assinatura do arquivo de metadados que pode ser transferido por download no campo KeyDescriptor use="signing". Por padrão, a assinatura de solicitação é configurada como off.
    Opcional: encryptResponse O sinalizador encryptResponse permite que você receba uma resposta criptografada de seu provedor de identidade como parte da solicitação de autenticação. Para configurar seu provedor de identidade SAML para enviar uma resposta criptografada, é necessário o certificado de criptografia que pode ser localizado no arquivo de metadados no campo KeyDescriptor use="encryption". Por padrão, a criptografia de resposta é configurada como off.
  3. Faça uma solicitação PUT para o endpoint da API /saml para fornecer a configuração que você criou na etapa 2 para App ID. Verifique o exemplo a seguir para ver como sua solicitação pode parecer.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
       {
         "isActive": true,
         "config": {
             "entityID": "https://example.com/saml2/metadata/706634",
             "signInUrl": "https://example.com/saml2/sso-redirect/706634",
             "certificates": [
             "certificate-example-pem-format"
             ],
             "displayName": "my saml example",
             "authnContext": {
                 "class": [
                     "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
                 ],
             "comparison": "exact"
             },
             "idpInitEnabled": true,
             "idpRedirectUrl": "https://example.com/redirect/endpoint",
         }
    }
    

Testando sua configuração

É possível testar a configuração entre seu Provedor de Identidade SAML e o App ID.

  1. Assegure-se de salvar a sua configuração.
  2. Navegue para a guia SAML 2.0 do painel App ID e clique em Testar. Uma nova guia é aberta.
  3. Efetue login com um usuário que seu provedor de identidade já autenticou.
  4. Depois de concluir o formulário, você é redirecionado para outra página.
    • Autenticação bem-sucedida: a conexão entre o App ID e o Provedor de Identidade está funcionando corretamente. A página exibe tokens de acesso e de identidade válidos.
    • Autenticação com falha: a conexão está quebrada. A página exibe os erros e o arquivo XML de resposta SAML.

A estrutura do SAML suporta vários perfis, fluxos e configurações, o que significa que o seu provedor de identidade deve ser configurado corretamente. Se você tiver problemas, verifique alguns motivos comuns pelos quais a solicitação de autenticação pode falhar ou consulte a especificação SAML para obter códigos de erro detalhados.