简介
本文档介绍授权代码授权流如何基于刷新令牌来改善各种设备(尤其是移动版Jabber)的Jabber用户体验。
先决条件
要求
Cisco 建议您了解以下主题:
- 思科统一通信管理器(CUCM)12.0版
- 单点登录(SSO)/SAML
- Cisco Jabber
- Microsoft ADFS
- 身份提供程序(IdP)
要获取有关这些主题的详细信息,请参阅以下链接:
使用的组件
本文档中的信息基于以下软件:
- Microsoft ADFS(IdP)
- LDAP Active Directory
- Cisco Jabber客户端
- CUCM 12.0
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
截至目前,Jabber SSO流与基础设施基于隐式授予流,其中CUCM授权服务分配短期访问令牌。
访问令牌到期后,CUCM将Jabber重定向到IdP以进行重新身份验证。
这会导致不良的用户体验,尤其是在移动Jabber中,用户需要频繁输入凭证。
安全重新架构解决方案还建议授权代码授权流(使用刷新令牌方法(可扩展到终端/其他协作应用)),以统一SSO和非SSO场景的Jabber和终端登录流。
功能亮点
- 授权代码授权流程基于刷新令牌(可扩展至终端/其他协作应用),以改进各种设备(尤其是移动版Jabber)的Jabber用户体验。
- 支持自包含签名和加密的OAuth令牌,以允许各种协作应用验证和响应客户端资源请求。
- 保留隐式授权流模型,以便向后兼容。这还允许未移至授权代码授予流的其他客户端(如RTMT)的无缝路径。
重要注意事项
- 这样,旧Jabber客户端可以与新CUCM配合使用(因为它同时支持隐式授权和授权代码授权流)。 此外,新Jabber可与旧CUCM配合使用。Jabber可以确定CUCM是否支持授权码授权流,并且仅当它支持此模型时,它才会切换并使用隐式授权流。
- 授权服务在CUCM服务器上运行。
- AuthZ仅支持隐式授权流。这意味着没有刷新令牌/脱机访问令牌。每次客户端需要新的访问令牌时,用户都需要使用IdP重新进行身份验证。
- 只有在部署启用SSO时,才颁发访问令牌。在这种情况下,非SSO部署不起作用,并且访问令牌未在所有接口上一致使用。
- 访问令牌不是自包含的,而是保留在发出它们的服务器的内存中。如果CUCM1发出访问令牌,则只能由CUCM1验证。如果客户端尝试访问CUCM2上的服务,CUCM2需要验证CUCM1上的令牌。网络延迟(代理模式)。
- 移动客户端上的用户体验非常糟糕,因为当用户使用IdP重新进行身份验证时,用户必须在字母数字键盘上重新输入凭证(通常运行1到8小时,具体取决于多个因素)。
- 通过多个接口与多个应用程序通话的客户端需要维护多个凭证/块。不支持从2个类似客户端登录同一用户。例如,用户A从运行于2个不同iPhone的jabber实例登录。
- AuthZ,支持SSO和非SSO部署。
- AuthZ支持隐式授权流+授权代码授权流。由于它向后兼容,它允许RTMT等客户端继续工作,直到他们适应。
- 使用授权代码授予流,授权发出访问令牌和刷新令牌。刷新令牌可用于获取另一个访问令牌,而无需身份验证。
- 访问令牌是自包含、签名和加密的,并使用JWT(JSON Web令牌)标准(符合RFC)。
- 签名密钥和加密密钥对群集是通用的。群集中的任何服务器都可以验证访问令牌。无需在内存中维护。
- 在CUCM 12.0上运行的服务是集群中的集中身份验证服务器。
- 刷新令牌存储在数据库(DB)中。 管理员需要能够撤销它(如果需要)。撤销基于用户ID或用户ID和客户端ID。
- 签名访问令牌允许不同产品验证访问令牌,而无需存储它们。可配置访问令牌和刷新令牌生存期(分别默认为1小时和60天)。
- JWT格式与Spark相一致,它支持未来与Spark Hybrid服务的协同效应。
- 支持同一用户从2台类似设备登录。例如:用户A可以从运行于2个不同iPhone的jabber实例登录。
授权码授权流的要素
配置
默认情况下,此功能未启用。
步骤1.要启用此功能,请导航至System > Enterprise Parameters。
步骤2.如图所示,将具有刷新登录流的参数OAuth设置为已启用。
- 访问令牌已签名并加密。签名和加密密钥对群集是通用的。这意味着群集中的任何节点都可以验证访问令牌。
- 访问令牌采用JWT格式(RFC 7519)。
- 访问令牌重复使用企业参数(OAuth访问令牌过期计时器),适用于旧令牌和新令牌格式。
- 默认值 — 60分钟。
- 最小值 — 1分钟
- 最大值 — 1440分钟
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjhkMGQ1MzI0LWY0ZjAtNGIwYi04MTFlLTRhNTlmZGI2YjcyMjpjMjc3MGM5N2JkYTlkMzRmZDA1YTdlYTFhZWQzZTU0Y2E4MGJkZDdlZTM1ZDk3MDNiNjBiNTQ5MTBiZDQ0ODRiIn0.eyJwcml2YXRlIjoiZXlKaGJHY2lPaUprYVhJaUxDSmpkSGtpT2lKS1YxUWlMQ0psYm1NaU9pSkJNVEk0UTBKRExVaFRNalUySWl3aWEybGtJam9pT0dRd1pEVXpNalF0WmpSbU1DMDBZakJpTFRneE1XVXROR0UxT1daa1lqWmlOekl5T21Vd1ptUm1ZMk16WlRRMU5ERTFOV0ZpTkRJek5tRTJOMlV4T0RCbU1qWmxZMkl3WXpJeE56SXlOREJtWlRFellXWXlOak14TkRkalpHVXpNR1l3TjJJaWZRLi5xQWd6aGdRaTVMMkdlaDl5V2RvN25nLmdMTHNpaTRjQk50c1NEUXRJTE51RWRnWTl4WkJVczJ4YzBaeTFGQjZQNmNzWWJfZkRnaDRZby04V1NaNjUzdXowbnFOalpXT1E1dGdnYW9qMlp6ZFk2ZzN2SWFHbF9JWUtNdkNIWWNscmt4YUFGTk5MWExLQlJmaTA2LVk2V3l1dUdxNmpNWk5DbnlKX1pTbUpkVFQwc1Z4RTdGTXVxaUJsMElrRGdyVDdvOFNXMEY5cXFadndEZDJSaDdqNkRJWGdkS3VtOWltU2xNU1pjejhueVdic01Udk5yMWY0M25VenJzMHk5WWN6NnBDX0czZmlWYjJsX2VWLVFkcFh4TUo2bnZodXcydjRiUGVkM3VMQlpaVW1oQ3B6TUVDdW5NMlh1TVBrTGdlS1NqWG44aGhPRFNVcW1WQ0Uta3RZdnRBc2Q0RnJxcGNxWlZiS0ZiVTFRbU0wV2pMYVJtUk9IVllQVkc0a3FBdTRWalVMUzVCRWszNnZ4Nmp3U3BMUy1IdTcwbVRNcmR3dmV5Q2ZOYkhyT0FlVmVvekFIR3JqdGlmaFpmSFVUTWZiNkMtX2tOQVJGQWdDclZTZy0wUzlxb1JvTWVkUENETEE4MDJiaWwtNDJjOC15MWo4X1FVaC02UUtCV2dodVd4VWtBODRpekFFaWl0QTlsSHFKM3Nxd2JFNURkZmhIay05bTJfTTN5MWlWVkdoRVQ3ZW9XVDBqWllnRGRBQjFzUGwxLTlaSFNYYmsydTE3SkJVRV9FOXI0V0tWMnBqWGtiN0lQSWgtQ3JWQTZkcVdQRHVIbmx1V19wblNLYnYtTkZVbGQ0WEY3cmZLYmQySlg4eUhhX05pOVVVUnUwZVdsNWxGRUVabklubmFKZEdHLUZrb3VuN2xHSFlwSE4ydXVudmRnOHZVZzZsa0JPbmozeUFjc1ZTMGxKc1NWdUxFYldwd2c4YjdBdDM3d3AtMWt2Y1ZQaWpCQ1lCV181d2JzbTFYd2k4MVc2WHVpNzMzQVg3cEJVQnBfT2VRNzQ2ZXJJekNUUFZCYUpZUGJuZWEtdFhsU3RmZzBGeVRmbnhnX1Vzazl3QXJkemE4c204T0FQaWMxZmFQOG0uUTdFN0FVX2xUVnNmZFI2bnkydUdhQSJ9.u2fJrVA55NQC3esPb4kcodt5rnjc1o-5uEDdUf-KnCYEPBZ7t2CTsMMVVE3nfRhM39MfTlNS-qVOVpuoW_51NYaENXQMxfxlU9aXp944QiU1OeFQKj_g-n2dEINRStbtUc3KMKqtz38BFf1g2Z51sdlnBn4XyVWPgGCf4XSfsFIa9fF051awQ0LcCv6YQTGer_6nk7t6F1MzPzBZzja1abpm--6LNSzjPftEiexpD2oXvW8Vl0Z9ggNk5Pn3Ne4RzqK09J9WChaJSXkTTE5G39EZcePmVNtcbayq-L2pAK5weDa2k4uYMfAQAwcTOhUrwK3yilwqjHAamcG-CoiPZQ
OAuth Refresh Token Expiry Timer” parameter in enterprise parameters page in CUCM.
Path: System -> Enterprise parameters
Values are integers ranging from 1 – 90
Minimum lifetime = 1 Day
Default lifetime = 60 days
Maximum lifetime = 90 days
每次客户端请求一个访问令牌时都会发出新的访问令牌。只要:
- 签名/加密密钥未更改
- 有效性(存储在令牌内)中断。
- JSON Web令牌:由三个部分组成,用点分隔,分为:报头、负载和签名。
访问令牌示例:
- 在标记的开头,以粗体突出显示的是标题。
- 中间部分是负载。
- 最后,如果标记以粗体突出显示,则表示该标记为签名。
网络图
以下是涉及的呼叫流的简要概述:
刷新令牌
- 刷新令牌已签名。
- 刷新令牌存储在数据库的refreshtokendetails表中,作为自身的哈希值。这是为了防止数据库复制,因为某人可以选择它。要查看表,可以运行:
run sql select * from refreshtokendetails
或者具有可读的有效日期:
run sql select pkid,refreshtokenindex,userid,clientid,dbinfo('utc_to_datetime',validity) as validity,state from refreshtokendetails
警告:有效期过期时,刷新令牌会从数据库中刷新。计时器线程每天凌晨2点运行(不能通过UI进行配置,但可以通过远程支持帐户进行修改)。如果表具有大量访问令牌,这些令牌无效,需要清空。这可能导致CPU峰值。
Sample refresh token:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjhkMGQ1MzI0LWY0ZjAtNGIwYi04MTFlLTRhNTlmZGI2YjcyMjpjMjc3MGM5N2JkYTlkMzRmZDA1YTdlYTFhZWQzZTU0Y2E4MGJkZDdlZTM1ZDk3MDNiNjBiNTQ5MTBiZDQ0ODRiIn0.eyJleHAiOjE1MDI2MjAwNTIsImlzcyI6IjhkMGQ1MzI0LWY0ZjAtNGIwYi04MTFlLTRhNTlmZGI2YjcyMiIsInR5cCI6InVzZXIiLCJ0aWQiOiJiOTkxMjIxZi1mNDJlLTRlNTItODg3MS1jODc2ZTYzNWRkNWIiLCJjdHlwIjoicmVmcmVzaCIsImNjaWQiOiJDM2IwYWZmZWZlMTQzOTA0MTY4M2U5YzJjMzdkMzZmNDM4ZWYwZWYyN2MwOTM4YWRjNjIyNmUwYzAzZDE2OWYyYSJ9.creRusfwSYAMAtttS2FIPAgIVvCiREvnzlouxeyGVndalJlMa-ZpRqv8FOBrsYwqEyulrl-TeM8XGGQCUvFaqO9IkhJqSYz3zvFvvySWzDhl_pPyWIQteAhL1GaQkue6a5ZegeHRp1sjEczKMLC6H68CHCfletn5-j2FNrAUOX99Vg5h4mHvlhfjJEel3dU_rciAIni12e3LOKajkzFxF6W0cXzzujyi2yPbY9gZsp9HoBbkkfThaZQbSlCEpvB3t7yRfEMIEaHhEUU4M3-uSybuvitUWJnUIdTONiWGRh_fOFR9LV3Iv9J54dbsecpsncc369pYhu5IHwvsglNKEQ
撤销刷新令牌
管理员能够通过用户ID或用户ID和客户端ID撤销用户或仅设备刷新令牌的所有刷新令牌。
要撤销用户的基于设备的RT:
签名和加密密钥
- 签名密钥基于RSA,具有公钥/私钥对。
- 加密密钥是对称密钥。
- 这些密钥仅在发布者上创建,并分布在集群中的所有节点上。
- 使用列出的选项,可以重新生成签名密钥和加密密钥。但是,只有管理员认为密钥已受到危害时,才能执行此操作。重新生成这些密钥中的任一密钥的影响是,由授权服务发出的所有访问令牌都变为无效。
- 可使用UI和CLI重新生成签名密钥。
- 加密密钥只能通过CLI重新生成。
从CUCM上的Cisco Unified OS Administration页面重新生成Authz证书(签名密钥)如图所示。
如图所示,使用CLI命令重新生成授权签名密钥。
管理员可以使用CLI显示身份验证签名和加密密钥。将显示密钥的哈希值,而不是原始密钥。
用于显示键的命令是:
签名密钥:show key authz signing,如图所示。
加密密钥:show key authz encryption和,如图所示。
注意:签名身份验证和加密身份验证始终不同。
验证
使用本部分可确认配置能否正常运行。
当要在Cisco Unity Connection(CUC)服务器上使用OAuth时,网络管理员必须执行两个步骤。
步骤1.配置Unity Connection服务器以从CUCM获取OAuth令牌签名和加密密钥。
步骤2.在CUC服务器上启用OAuth服务。
注意:要获取签名和加密密钥,必须为Unity配置CUCM主机详细信息和启用CUCM AXL访问的用户帐户。如果未配置,则Unity Server无法从CUCM检索OAuth令牌,用户的语音邮件登录不可用。
导航至Cisco Unity Connection Administration > System Settings > Authz Servers
故障排除
本节提供可用于排除配置故障的信息。
注意:如果使用OAuth且Cisco Jabber用户无法登录,请始终查看CUCM和即时消息和在线状态(IM&P)服务器的签名和加密密钥。
网络管理员需要在所有CUCM和IM&P节点上运行以下两个命令:
- show key authz signing
- show key authz encryption
如果签名授权和加密授权输出在所有节点之间不匹配,则需要重新生成。要执行此操作,需要在所有CUCM和IM&P节点上运行以下两个命令:
- set key regen authz encryption
- set key regen authz signing
之后,需要在所有节点上重新启动Cisco Tomcat服务。
除密钥不匹配外,Cisco Jabber日志中还可以找到以下错误行:
2021-03-30 14:21:49,631 WARN [0x0000264c] [vices\impl\system\SingleSignOn.cpp(1186)] [Single-Sign-On-Logger] [CSFUnified::SingleSignOn::Impl::handleRefreshTokenFailure] - Failed to get valid access token from refresh token, maybe server issue.
sso应用日志在以下位置生成:
- 文件视图活动日志platform/log/ssoApp.log这不需要任何跟踪配置来收集日志。每次完成SSO应用操作后,ssoApp.log文件中都会生成新的日志条目。
- SSOSP日志: 文件列表激活tomcat/logs/ssosp/log4j
每次启用sso时,都会在此位置创建一个名为ssosp00XXX.log的新日志文件。任何其他SSO操作和所有Oauth操作也会登录到此文件。
- 证书日志: 文件列表activevelog平台/log/certMgmt*.log
每次重新生成AuthZ证书(UI或CLI)时,都会为此事件生成新的日志文件。
为了重新生成授权加密密钥,将为此事件生成新的日志文件。
相关信息
使用思科协作解决方案版本12.0部署OAuth