目录

简介

先决条件

要求

使用的组件

背景信息

配置

验证

故障排除

相关信息

简介

本文档介绍如何改善统一联系中心企业版(UCCE)单点登录(SSO)登录中的最终用户体验。  如果用户不被强制在身份提供程序(IdP)登录页面再次输入其登录ID，则可以改进此功能。

先决条件

要求

Cisco 建议您了解以下主题：

- UCCE SSO登录流和AD FS

- 超文本传输协议(HTTP)

- 超文本标记语言(HTML)

- 安全断言标记语言2.0(SAMLv2)

- 打开授权2.0(OAuthv2)

- 熟悉Windows PowerShell(PS)

- 熟悉JavaScript(JS)

使用的组件

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

- UCCE 11.5(1)及以上版本

- Finesse 11.5(1)及以上版本

- 思科统一情报中心(CUIC)11.5(1)及更高版本。

- Microsoft Active Directory(AD) — 安装在Windows Server上的AD

- AD FS 2.0/3.0

- Windows Server 2012 R2

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

背景信息

在UCCE SSO登录中，用户必须输入其登录ID两次：首先在UCCE应用登录页（Finesse、CUIC等）上输入，其次在IdP登录页（如果使用Forms Authentication方法）上输入。 在本文档的示例中，Active Directory联合身份验证服务(AD FS)用作IdP。

在UCCE中启用SSO时，在输入登录ID并按CUIC/Finesse上的Submit/Login按钮后，输入的登录ID将存储在cookie cc_username中，并保留以用于重定向到身份服务器(IdS)，然后重定向到IdP。可以在IdP登录页上使用此cookie自动填充登录ID。

请复习，以下是HTTP/SAML流程图示例，其中最终用户是Finesse代理，UCCE应用是Finesse服务器。

这是最终用户Web浏览器向AD FS(IdP)发送的步骤4c HTTP请求报头的示例。

Request URL: https://dc01.omozol.lab/adfs/ls/?SAMLRequest=tZTBjtowEIbv%2BxSR...

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

Cache-Control: no-cache

Connection: keep-alive

Cookie: cc_username=agent1%40omozol.lab

Host: dc01.omozol.lab

Pragma: no-cache

Referer: https://fns01p.omozol.lab/desktop/container/landing.jsp?locale=en_US

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

配置

以AD FS 3.0作为IdP，通过修改onload.js文件(AD FS将其注入到HTML页面中以响应https://<AD FS FQDN>/adfs/ls/)返回给用户)来实现配置。

步骤1.要修改onload.js文件，请通过PowerShell cmdlet将文件导出到文件系统：

PS C:\> Export-AdfsWebTheme -Name default -DirectoryPath c:\temp\adfs\

onload.js文件被放置在此目录中：

C:\temp\adfs\script

步骤2.根据登录格式，在文件中现有代码结构/逻辑之外的任何位置添加正确的JS代码片段。为方便起见，请将其添加到文件底部。

默认情况下，Windows Server 2012 R2中AD FS向SSO用户显示的登录页需要用户名为userPrincipleName(UPN)表单。这是类似电子邮件的格式，例如user@cisco.com。在单个域联系中心中，可以修改AD FS登录页面，以允许不包含域名作为用户名一部分的简单sAMAccountNameUser ID(UID)。

如果AD FS登录页上需要输入UPN用户名，请使用以下代码段：

// Get cc_username as login ID from HTTP Cookie header

if (document.cookie) {

// If the position of cc_username in the cookie is the first position, 0...

if (document.cookie.indexOf('cc_username') == 0) {

// Split the cookie into an array with the delimitor being '='

var cookies = document.cookie.split('=');

// If the first element of the array is cc_username then...

if (cookies[0] == 'cc_username') {

// ...the second element will be the actual username and we should save that.

var cc_login_name = cookies[1];

}

// Customize Login page: add domain if needed as AD FS by default require login ID in UPN form

// If the parsed login is not null, do the following logic

if (cc_login_name != null) {

// If %40 (encoded '=') does not exist in the login name...

if (cc_login_name.indexOf('%40') == -1) {

// ...then add '@domain.com' to ensure a UPN format is input

var userNameValue = cc_login_name + '@' + 'domain.com';

// Populate the UPN into the userNameInput of the page, and put the focus

// on the password.

document.getElementById("userNameInput").value = userNameValue;

document.getElementById("passwordInput").focus();

} else {

// Otherwise, if %40 does exist in the username, replace it with the @ sign

// and populate the UPN into the userNameInput of the page, and put the

// focus on the password.

var userNameValue = cc_login_name.replace('%40', '@');

document.getElementById("userNameInput").value = userNameValue;

document.getElementById("passwordInput").focus();

}

}

}

}

在此行中，如果UPN用作登录UID，则必须修改domain.com以匹配UCCE代理的域。

var userNameValue = cc_login_name + '@' + 'domain.com';

注意：AD FS默认使用UPN登录。有关如何配置AD FS登录页以允许sAMAcc的信息，请参阅UCCE功能指南的单点登录一章（可选）自定义Windows Server 2012 R2中的AD FS登录页以允许用户ID部分countName登录。

如果应在AD FS登录页上输入sAMAccountName（无域的UID）用户名，请使用以下代码段：

// Get cc_username as login ID from HTTP Cookie header

if (document.cookie) {

// If the position of cc_username in the cookie is the first position, 0...

if (document.cookie.indexOf('cc_username') == 0) {

// Split the cookie into an array with the delimitor being '='

var cookies = document.cookie.split('=');

// If the first element of the array is cc_username then...

if (cookies[0] == 'cc_username') {

// ...the second element will be the actual username and we should save that.

var cc_login_name = cookies[1];

}

// Customize Login page: remove domain if needed to use login ID in sAMAccount form

// If the parsed login is not null, do the following logic

if (cc_login_name != null) {

// If %40 (encoded '=') DOES exist in the login name...

if (cc_login_name.indexOf('%40') != -1) {

// ...then split the login into an array about the @ sign and only keep the username.

var domainLogin = cc_login_name.replace('%40', '@')

var noDomainLogin = domainLogin.split('@');

var userNameValue = noDomainLogin[0];

// Populate the sAMAccountName into the userNameInput of the page, and put the focus

// on the password.

document.getElementById("userNameInput").value = userNameValue;

document.getElementById("passwordInput").focus();

} else {

// Otherwise, if %40 does not exist in the username, there is no "@domain",

// so populate the sAMAccountName into the userNameInput of the page,

// and put the focus on the password.

document.getElementById("userNameInput").value = cc_login_name;

document.getElementById("passwordInput").focus();

}

}

}

}

注意：代码中的//符号表示注释。如果需要，可以删除这些行。其目的是帮助理解Javascript代码。

步骤3.使用以下PowerShell命令保存onload.js并将其重新加载到新的AD FS Web主题：

使用默认主题的模板创建自定义AD FS主题：

PS C:\> New-AdfsWebTheme -Name custom -SourceName default

将自定义AD FS主题设置为活动：

PS C:\> Set-AdfsWebConfig -ActiveThemeName自定义

将修改的onload.js文件加载到自定义主题：

PS C:\> Set-AdfsWebTheme -TargetName custom -AdditionalFileResource @{Uri='/adfs/portal/script/onload.js';path="c:\temp\adfs\script\onload.js"}

注意：无需重新启动AD FS。活动主题会自动修改。

验证

使用本部分可确认配置能否正常运行。

使用启用SSO的帐户登录Finesse或CUIC，并且使用sAMAccountName或UPN作为登录ID（取决于AD FS配置），并观察在AD FS登录页上，用户ID会自动填充以关注密码提示字段。只需输入密码即可继续登录。

故障排除

本部分提供了可用于对配置进行故障排除的信息。

如果出现问题，Web浏览器开发人员工具用于检查onload.js的修改是否插入到返回的HTML页中，以及Web浏览器控制台中是否发现任何错误。

相关信息

- Firefox开发人员工具

- Chrome开发人员工具

- Internet Explorer(F12)开发人员工具

- SAM帐户名称

- userPrincipleName

- UID

- 思科统一联系中心企业功能指南

- 技术支持和文档 - Cisco Systems