简介
 
  本文档介绍如何通过Microsoft Azure MFA配置安全断言标记语言(SAML),重点关注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的值。如果EntityDescriptor字段下包含IDPSSODescriptor(用于单点登录IdP),则此字段下包含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,这通常是Assertion Consumer Service和单一注销服务。
 
  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= SSO Service >。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。 
 
  
 
  第二步:如此图中所示,请选择企业应用。 
 
  
 
  第三步: 现在,请选择New Application,如下图所示。
 
   
  
 
  第四步:在从库添加部分,在搜索框中键入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。
- Login URL -这是URL登录。
- 注销URL -这是URL注销。

 
  将Azure AD用户分配给应用
 
  在本部分中,由于您向Cisco AnyConnect应用授予了访问权限,因此启用了Test1以使用Azure单一登录。 
 
  步骤1:在应用的概述页面中,选择用户和组,然后选择添加用户。 
 
  
 
  第二步:在“Add Assignment”对话框中选择Users and groups。 
 
  
 
  第三步: 在添加作业对话框中,单击分配按钮。 
 
  
 
   
  通过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匹配。 
 
    
 
  断言消费者服务的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 
 
  相关信息