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.
| 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.
- 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
/authorizationpor 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. - 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. - O provedor de identidade analisa a solicitação SAML, autentica o usuário e gera uma resposta SAML com suas asserções.
- O provedor de identidade redireciona o usuário e a resposta de volta para o App ID com a resposta SAML.
- 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.
- 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:
nameemaillocalepicture
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.
-
Na guia Gerenciar do painel do App ID, clique em Editar na linha SAML para definir as suas configurações.
-
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 EntityIDO identificador que permite que o provedor de identidade saiba que o App ID emitiu a solicitação de SAML. Location URLO local para o qual o provedor de identidade envia as asserções SAML após autenticar com êxito um usuário. BindingAs instruções sobre como o provedor de identidade deve enviar a resposta de SAML. NameID FormatComo 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: <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">.WantAssertionsSignedO 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. KeyDescriptorOs 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. -
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.
-
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.
-
Navegue para a guia SAML 2.0 do painel App ID.
-
Inclua o Nome do provedor O nome padrão é SAML.
-
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 URLA URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML. Entity IDO nome globalmente exclusivo para um provedor de identidade SAML. Primary certificateO 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: 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.
-
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.
- Ative o IdP login iniciado.
- Digite o redirecionamento IdP URL.
- Clique em Salvar.
Fornecendo Metadados com a API
-
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" } } } -
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 signInUrlA URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML. entityIDO nome globalmente exclusivo para um provedor de identidade SAML. displayNameO nome designado à sua configuração SAML. primary-certificate-example-pem-formatO 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-formatO 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: authnContextO 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 classecomparisoncom seus valores. Por exemplo, um parâmetroclasspode parecer semelhante aurn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.Opcional: signRequestO sinalizador signRequestfornece 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 campoKeyDescriptor use="signing". Por padrão, a assinatura de solicitação é configurada comooff.Opcional: encryptResponseO sinalizador encryptResponsepermite 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 campoKeyDescriptor use="encryption". Por padrão, a criptografia de resposta é configurada comooff. -
Faça uma solicitação PUT para o endpoint da API
/samlpara 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.
-
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" } } } -
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 signInUrlA URL para a qual o usuário é redirecionado para autenticação. Ela é hospedada por seu provedor de identidade SAML. entityIDO nome globalmente exclusivo para um provedor de identidade SAML. displayNameO nome designado à sua configuração SAML. primary-certificate-example-pem-formatO 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.DefaultRelayStateO 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 deidpRedirectUrldurante as solicitações SAML do seu provedor de identidade. Se você configurar ambas as variáveis, o valor deDefaultRelayStateterá precedência. IdP-initiated o login falhará se você não definir uma dessas variáveis.idpInitEnabledUm booleano para indicar se você deseja ativar o login iniciado pelo IdP idpRedirectUrlO 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çoDefaultRelayStatecomo o redirecionamento URL. Se você configurar ambas as variáveis, o valor deDefaultRelayStateterá precedência. IdP-initiated o login falhará se você não definir uma dessas variáveis.Opcional: secondary-certificate-example-pem-formatO 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: authnContextO 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 classecomparisoncom seus valores. Por exemplo, um parâmetroclasspode parecer semelhante aurn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.Opcional: signRequestO sinalizador signRequestfornece 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 campoKeyDescriptor use="signing". Por padrão, a assinatura de solicitação é configurada comooff.Opcional: encryptResponseO sinalizador encryptResponsepermite 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 campoKeyDescriptor use="encryption". Por padrão, a criptografia de resposta é configurada comooff. -
Faça uma solicitação PUT para o endpoint da API
/samlpara 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.
- Assegure-se de salvar a sua configuração.
- Navegue para a guia SAML 2.0 do painel App ID e clique em Testar. Uma nova guia é aberta.
- Efetue login com um usuário que seu provedor de identidade já autenticou.
- 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.