目录

简介

先决条件

要求

使用的组件

背景信息

SAML组件

用于签名和加密操作的证书

网络图

配置

从Microsoft应用库添加Cisco AnyConnect

将Azure AD用户分配给应用

通过CLI为SAML配置ASA

验证

使用SAML身份验证测试AnyConnect

常见问题

实体ID不匹配

时间不匹配

使用了错误的IdP签名证书

断言受众无效

Assertion Consumer Service的URL错误

未生效的SAML配置更改

故障排除

相关信息

简介

本文档介绍如何配置安全断言标记语言(SAML)，重点介绍通过Microsoft Azure MFA的自适应安全设备(ASA)AnyConnect。

先决条件

要求

Cisco 建议您了解以下主题：

- 基本了解ASA上的RA VPN配置。

- SAML和Microsoft Azure的基本知识。

- AnyConnect许可证已启用（APEX或仅VPN）。

使用的组件

本文档中的信息基于以下软件和硬件版本：

- Microsoft Azure AD订阅。

- Cisco ASA 9.7+和Anyconnect 4.6+

- 使用AnyConnect VPN配置文件

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

SAML是一个基于XML的框架，用于在安全域之间交换身份验证和授权数据。它在用户、服务提供商(SP)和身份提供者(IdP)之间创建信任圈，允许用户一次性登录多个服务。Microsoft Azure MFA与Cisco ASA VPN设备无缝集成，为Cisco AnyConnect VPN登录提供额外的安全性。

SAML组件

元数据：它是基于XML的文档，用于确保IdP和SP之间的安全事务。它允许IdP和SP协商协议。

设备(IdP、SP)支持的角色

设备可以支持多个角色，并且可以同时包含SP和IdP的值。如果包含的信息用于单点登录IdP，则在EntityDescriptor字段下为IDPSSODescriptor；如果包含的信息用于单点登录SP，则此字段下为SPSSODescriptor。这很重要，因为为了成功设置SAML，必须从相应的部分获取正确的值。

实体ID：此字段是SP或IdP的唯一标识符。单个设备可以有多个服务，并且可以使用不同的实体ID来区分这些服务。例如，ASA对于需要身份验证的不同隧道组具有不同的实体ID。对每个隧道组进行身份验证的IdP对每个隧道组都有单独的实体ID条目，以便准确识别这些服务。

ASA可以支持多个IdP，并为每个IdP提供单独的实体ID以区分它们。如果任一端收到来自不包含以前配置的实体ID的设备的消息，则设备可能会丢弃此消息，并且SAML身份验证失败。实体ID位于entityID旁边的EntityDescriptor字段中。

服务URL：这些字段定义由SP或IdP提供的SAML服务的URL。对于IdP，这通常为单一注销服务和单一登录服务。对于SP，这通常是断言消费者服务和单一注销服务。

SP使用IdP元数据中找到的单点登录服务URL将用户重定向到IdP进行身份验证。如果此值配置不正确，则IdP不会接收或无法成功处理由SP发送的身份验证请求。

IdP使用在SP元数据中找到的Assertion Consumer Service URL将用户重定向回SP并提供有关用户身份验证尝试的信息。如果配置不正确，SP不会收到断言（响应）或无法成功处理该断言。

在SP和IdP上都可以找到单一注销服务URL。它用于简化从SP注销所有SSO服务的过程，并且在ASA上是可选的。在SP上配置来自IdP元数据的SLO服务URL时，当用户从SP上的服务注销时，SP会将请求发送到IdP。IdP成功从服务中注销用户后，会将用户重定向回SP并使用在SP的元数据中找到的SLO服务URL。

服务URL的SAML绑定：绑定是SP用来将信息传输到IdP的方法，反之亦然。这包括HTTP重定向、HTTP POST和项目。每种方法传输数据的方式各不相同。服务支持的绑定方法包含在该服务的定义中。例如：SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location=https://saml.example.com/simplesaml/saml2/idp/SSOService.php/ >。ASA不支持项目绑定。ASA始终对SAML身份验证请求使用HTTP重定向方法，因此，选择使用HTTP重定向绑定的SSO服务URL以使IdP预期这一点，这一点非常重要。

用于签名和加密操作的证书

为了为SP和IdP之间发送的消息提供机密性和完整性，SAML具有对数据进行加密和签名的功能。用于对数据进行加密和/或签名的证书可以包含在元数据中，以便接收方可以验证SAML消息并确保其来自预期源。用于签名和加密的证书可在KeyDescriptor use="signing"和KeyDescriptor use="encryption"下的元数据中找到，依次是X509Certificate。ASA不支持加密SAML消息。

网络图

配置

从Microsoft应用库添加Cisco AnyConnect

步骤1.登录到Azure门户并选择Azure Active Directory。

第二步：如图所示，选择Enterprise Applications。

第三步： 现在，选择New Application，如下图所示。

第四步：在Add from the gallery部分中，在搜索框中键入AnyConnect，从结果面板中选择Cisco AnyConnect，然后添加应用。

第五步：选择Single Sign-on菜单项，如下图所示。

第六步：选择SAML，如图所示。

步骤 7.使用以下详细信息编辑第1部分。

a. Identifier (Entity ID)  - https://<VPN URL>/saml/sp/metadata/<TUNNEL-GROUP NAME>

b. Reply URL (Assertion Consumer Service URL) - https://<VPN URL>/+CSCOE+/saml/sp/acs?tgname=<TUNNEL-GROUP NAME>

Example: vpn url called asa.example.com and tunnel-group called AnyConnectVPN-1

步骤 8在SAML Signing Certificate部分中，选择Download以下载证书文件，然后将其保存到您的计算机上。

步骤 9对于ASA配置，这是必需的。

- Azure AD Identifier — 这是我们的VPN配置中的saml idp。

- 登录URL — 这是URL登录。

- 注销URL — 这是URL注销。

将Azure AD用户分配给应用

在本节中，当您授予Cisco AnyConnect应用的访问权限时，Test1将启用为使用Azure单点登录。

步骤1:在应用的概述页面中，选择Users and groups，然后选择Add user。

第二步：在Add Assignment对话框中选择Users and groups。

第三步： 在Add Assignment对话框中，单击Assign按钮。

通过CLI为SAML配置ASA

步骤1: 创建信任点并导入我们的SAML证书。

config t

crypto ca trustpoint AzureAD-AC-SAML

revocation-check none

no id-usage

enrollment terminal

no ca-check

crypto ca authenticate AzureAD-AC-SAML

-----BEGIN CERTIFICATE-----

…

PEM Certificate Text you downloaded goes here

…

-----END CERTIFICATE-----

quit

第二步： 这些命令会调配您的SAML IdP。

webvpn

saml idp https://xxx.windows.net/xxxxxxxxxxxxx/ - [Azure AD Identifier]

url sign-in https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxx/saml2 - [Login URL]

url sign-out https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0 – Logout URL

trustpoint idp AzureAD-AC-SAML - [IdP Trustpoint]

trustpoint sp ASA-EXTERNAL-CERT - [SP Trustpoint]

no force re-authentication

no signature

base-url https://asa.example.com

第三步： 将SAML身份验证应用于VPN隧道配置。

tunnel-group AnyConnectVPN-1 webvpn-attributes

saml identity-provider https://xxx.windows.net/xxxxxxxxxxxxx/

authentication saml

end

write memory

注：如果更改IdP配置，您需要从隧道组删除saml identity-provider配置，然后重新应用该配置，以使更改生效。

验证

使用SAML身份验证测试AnyConnect

步骤1: 连接到您的VPN URL并在Azure AD详细信息中输入您的日志。

步骤2.批准登录请求。

步骤3. AnyConnect已连接。

常见问题

实体ID不匹配

调试示例：

[SAML] consume_assertion：提供商的标识符是未知的#LassoServer。要在#LassoServer对象中注册提供程序，必须使用方法lasso_server_add_provider()或lasso_server_add_provider_from_buffer()。

问题：通常，表示ASA的webvpn配置下的saml idp [entityID]命令与IdP元数据中的IdP实体ID不匹配。

解决方案：检查IdP的元数据文件的实体ID，并更改saml idp [entity id]命令以匹配此项。

时间不匹配

调试示例：

[SAML] NotBefore:2017-09-05T23:59:01.896Z NotOnOrAfter:2017-09-06T00:59:01.896Z超时：0

[SAML] consume_assertion：断言已过期或无效

问题 1. ASA时间未与IdP的时间同步。

解决方案 1.为ASA配置IdP使用的同一NTP服务器。

问题 2. 断言在指定时间之间无效。

解决方案 2. 修改ASA上配置的超时值。

使用了错误的IdP签名证书

调试示例：

[Lasso] func=xmlSecOpenSSLEvpSignatureVerify:file=signatures.c:line=493:obj=rsa-sha1:subj=EVP_VerifyFinal:error=18:data do not match:signature do not match

[SAML] consume_assertion：配置文件无法验证消息上的签名

问题：ASA无法验证由IdP签名的消息，或者没有供ASA验证的签名。

解决方案：检查ASA上安装的IdP签名证书，以确保其与IdP发送的内容匹配。如果确认这一点，请确保签名包含在SAML响应中。

断言受众无效

调试示例：

[SAML] consume_assertion：断言受众无效

问题：IdP定义不正确的受众。

解决方案：更正IdP上的受众配置。它必须与ASA的实体ID匹配。

Assertion Consumer Service的URL错误

调试示例：发送初始身份验证请求后，无法接收任何调试。用户能够在IdP输入凭证，但IdP不会重定向到ASA。

问题：为错误的断言消费者服务URL配置了IdP。

解决方案：检查配置中的基本URL并确保其正确。使用show检查ASA元数据，确保Assertion Consumer Service URL正确。要测试它，请浏览它。如果两者在ASA上都正确，请检查IdP以确保URL正确。

未生效的SAML配置更改

示例：在修改或更改单点登录URL后，SP证书SAML仍然无法正常运行并发送之前的配置。

问题：当存在影响它的配置更改时，ASA需要重新生成其元数据。它不会自动执行此操作。

解决方案：进行更改后，在受影响的隧道组下删除并重新应用saml idp [entity-id]命令。

故障排除

大多数SAML故障排除都涉及配置错误，在选中SAML配置或运行调试时可以找到该错误配置。debug webvpn saml 255可用于排除大多数问题，但是，在此调试不提供有用信息的情况下，可以运行其他调试：

debug webvpn saml 255

debug webvpn 255

debug webvpn session 255

debug webvpn request 255

相关信息

- 使用应用代理实现本地应用的SAML单点登录