PMP集成企业工单系统

(功能只适用于企业版)

概览

PMP可与多种工单系统集成,自动化验证与特权访问相关的服务请求。通过集成,确保用户只能访问有效的工单ID中规定的授权的特权密码。这样也可以扩展PMP的工作流,将授权访问的审批与服务请求的验证有机地结合在一起。

集成是如何工作的?

PMP与企业工单系统集成,用户需要输入工单ID来进行密码检索或重置。PMP授权访问之前要验证以下选项:

  • 验证工单系统中是否存在用户输入的工单ID
  • 验证该工单是否没有被关闭
  • 用户是否有权查看该密码,从而访问该资源
  • 尝试密码重置时,验证所需的权限

除了验证以上默认的几个选项外,您还可以自定义验证条件标准来授权密码访问。整个过程是完全被审计的 - 就是说,特权行动可以追溯到工单ID。工单系统中凭借工单ID追踪密码访问。此外,您还可以创建自定义报表,显示通过工单ID进行的特权访问。

如何集成?

PMP与工单系统集成的过程很简单,PMP目前支持与ManageEngine ServiceDesk Plus On-Demand, ServiceDesk Plus 及 ServiceNow的集成。您也可以通过指定自定义Java类的方式,与其他的任何工单系统进行集成。

集成工单系统:

  • 打开管理 >> 全局,点击工单系统集成
  • 在打开的界面中,您可以选择您希望集成的工单系统(从支持的工单系统列表中进行选择;如果列表中没有您想要的工单系统,选择"其他")

集成支持的工单系统:

集成支持的工单系统是很简单的,您只需提供必要的信息就能与工单系统建立连接。

配置连接

  • 从根本上来说,集成是通过对应的工单系统所提供的REST API来实现的。因此,您需要指定/生成认证令牌(AUTH Token)及工单系统的URL。您可以从相应的网站获得各自的认证令牌(AUTH Token) - ManageEngine ServiceDesk Plus On-DemandServiceDesk Plus MSPServiceDesk Plus或ServiceNow.
  • 默认情况下,PMP将验证工单系统中是否存在用户输入的工单ID,以及该工单是否没有被关闭。 如果验证之后满足这些条件,则认为工单系统的集成验证工作完成。

可选的高级配置

如果您需要验证更多信息/条件(除了工单ID和工单状态),可点击页面中的更多 --> 高级配置。例如:您可以选择检查PMP中提出密码访问请求的用户是否为工单系统中的请求人(REQUESTER),类似地,可以指定检查的其他条件,如:工单系统的优先级(PRIORITY)是否为HIGH等。PMP为您提供很大的弹性,您可以检查工单系统的任何参数,包括自定义字段。

进行高级配置,点击更多 >> 高级配置链接。在弹出的界面中,您可以进行高级配置。高级配置可以设置一系列可用的条件,也可以指定自定义类。

高级配置的选项

1.指定PMP与工单系统中项目的映射关系

  • 要验证PMP中的特定列是否与工单系统的指定列是否一致,需要选择"指定PMP与工单系统中项目的映射关系"
  • 字段名称包含 - 资源名称、资源类型、用户账户、PMP用户名、DNS名称等等。还包括PMP中创建的定制字段。
  • 通过选择字段,您可以选择筛选的条件
  • 工单系统列列出了(包括自定义字段)工单系统中可用的字段。您需要选择必须与PMP映射的字段。 例如您可以选择PMP中的RESOURCE NAME与工单系统ASSET映射。一旦你指定这样的映射,在授权访问密码之前,PMP将检查PMP指定的RESOURCE NAME是否与工单系统ASSET匹配。只有在验证成功,才会授予访问权限。

2.要在工单系统中检查的条件

  • 验证工单的具体条件是否匹配,您需要选择'要在工单系统中检查的条件'。默认情况下,该选项处于未选择的状态。
  • 您可以选择任意数量的额外字段并且PMP会验证所有的工单系统。默认情况下PMP列出了工单系统中所有的可用字段,额外字段中还包括自定义字段。您可以选择PMP需要验证的值。

测试工单系统

集成完成后,您可以测试一下确保PMP能够正确地与工单系统建立通讯。点击更多设置"测试设置"链接。作为测试的一部分,您也可以通过获取自定义段 获取PMP高级设置中的自定义段。

自定义实现类

如果高级配置不能满足您的需求,您可以提供您自己的自定义实现并将所实现类的Jar文件更新到PMP中,实现集成。了解更多关于这方面的内容,请点击'集成其他工单系统',查看相关步骤。

工单系统验证执行和异常

  • 一旦完成了工单系统集成,集成立即生效并且用户需要使用有效的工单ID用以访问密码。通过设置,超级管理员可以免于强制工单ID验证。另外,作为访问控制流的一部分,用户会强制要求产生工单ID并且验证工单ID后访问权限会自动授予。
  • 您也可以有选择的启用/禁用资源组的工单验证。选择"资源组" >>点击"批量配置"标签中的"配置工单系统的信息"。
  • 从'全局设置'中,通过"允许用户不用工单ID而直接取回密码"和"允许用户不用工单ID而直接重置密码"选项您可以选择性地允许或限制用户。
  • 另外,您还可以对用户组进行的设置,点击管理 >>用户组页面的设置图标。

禁用工单系统集成

如果需要,您可以随时禁用工单系统集成,仅需要勾选工单系统页面中的'工单系统目前被禁用 '选项。

集成其他工单系统

如果您需要集成其他工单系统,可以将您的自定义实现类与PMP集成。为了引导用户完成这一操作,我们以集成Zendesk作为例子解释这一过程,如下:

步骤 1: 创建你的自定义类

参考为集成Zendesk创建的实现类样本,实现类的重要方面解释如下:

生成认证令牌

第一步是生成工单系统的认证令牌以确保能够与PMP建立连接,生成TAUTH TOKEN后,确保管理员提供的凭证能够访问工单系统。您可以通过直接提供实现类的凭证或者生成并使用令牌来完成。

下面的代码片段显示了如何生成工单系统特权用户的Base64 Authstring。当REST API是基于Base64 Authorization文件头的时候,下面的代码就会起作用。一些工单系统提供内在用户界面的AUTH-Token。这种情况下,你可以直接使用验证参数。另外,在实现类中为了不使用硬编码的用户名和密码,您可以跳过这一部分使REST API直接调用java或其他编译器生成的Base64令牌。

参考下面的代码片段:

//从Zendesk登录凭证中构建Authstring
String username = "username@example.com"; //Zendesk用户名
String password = "zendeskpassword"; //Zendesk密码
Base64 encoder = new Base64();
byte[] encodedPassword = (username + ":" + password).getBytes();
byte[] encodedString = encoder.encodeBase64(encodedPassword);
String authStr = new String(encodedString);


步骤 2: 检查与工单系统的连接

使用REST API,PMP可以从工单系统中获取工单的信息。每个工单系统都遵循着自己的传播工单明细的过程。参照各自的文档来验证该过程。获取工单信息后,您需要进行验证。

参考下面的代码片段:

String sUrl = "https://<zendesk-instance>.zendesk.com/api/v2/tickets/"; //REST API调用Zendesk
sUrl = sUrl + ticketId +".json"; //工单ID,用于同PMP用户提供值进行验证
URL url = new URL(sUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestProperty("Authorization","Basic "+authStr); //设置Authstring头文件


步骤 3: 验证PMP指定列是否与选择的工单系统匹配(可选配置)

参考下面的代码片段验证PMP指定列是否与选择的工单系统匹配(例如,您可以选择验证PMP指定的RESOURCE NAME是否与工单系统SUBJECT匹配。一旦设置完成,在授权访问密码之前,PMP将检查PMP指定的RESOURCE NAME是否与工单系统SUBJECT匹配(subject是否包含资源名称)。只有在验证成功,才会授予访问权限:

String assetName = (String)pmpColumns.get("Resource Name");//PMP密码完成相关操作的资员名称
String subject = (String)ticket.get("subject");//获取工单subject值
boolean descriptionCheck = subject.toLowerCase().contains(assetName.toLowerCase());
//检查工单的描述是否包含用户账户的资源名


步骤 4: 验证要在工单系统中检查的条件(可选配置)

验证工单的具体条件是否匹配,您需要选择'要在工单系统中检查的条件'。默认情况下,该选项处于未选择的状态。您可以选择任意数量的额外字段并且PMP会验证所有的工单系统。默认情况下PMP列出了工单系统中所有的可用字段,额外字段中还包括自定义字段。您可以选择PMP需要验证的值。请参考下面实现类的代码片段:

JSONObject ticket = (JSONObject)ticketingOuput.get("ticket");
String status = (String)ticket.get("status");
boolean statusCheck = "open".equalsIgnoreCase(status); //检查工单状态是否处于open状态


步骤 5: 编译

编译类路径中的jar文件(jar保存在<PMP_HOME>\lib文件夹中)
AdventNetPassTrix.jar;
json_simple-1.1.jar;
commons-codec-1.4.jar
例如,
javac -d . -cp AdventNetPassTrix.jar;json_simple-1.1.jar;commons-codec-1.4.jar ZendeskImpl.java - (For Windows)
javac -d . -cp AdventNetPassTrix.jar:json_simple-1.1.jar:commons-codec-1.4.jar ZendeskImpl.java - (For Linux)

步骤 6: 配置在PMP中安装

  • 实现类文件作为一个单独的jar并保存在PMP_HOME\lib文件夹中
  • 重启PMP服务以使PMP能够使用该实现类
  • 进入管理 >> 全局并点击工单系统集成
  • 在打开的界面中选择其他(集成其他工单系统)或已集成工单系统'高级设置'中的'实现类'选项(如果您想扩展功能)
  • 选择实现类的名称
  • 功能实现必须通过另一个管理员,其他任一位管理员(除了请求的创建者)将会收到关于请求批准的警告
  • 如果一位管理员批准了该实现类,那么它就可以使用了
  • 启用后,工单系统流将强制密码检索和密码重置

了解更多信息,请参考集成Zendesk实现类样本。

实现类提示

对于上面步骤3和步骤4,您可能需要提供实现类的额外信息。详细信息请参考下面的建议:

PMP中的列

通过PMP列参数表示用户账户列表数据工单请求上升:

PMP用户名 - 登录用户名
资源名称 - 资源的名称
DNS名称 - 资源的IP地址
用户账户 - 账户名称
资源类型 - 被访问的资源类型(Windows/WindowsDomain/Linux等)
资源描述 - 资源的有关描述
部门 - 资源所属的部门
位置 - 资源位置
域名 - 资源所属域名
请求类型 - 工单系统调用的请求类型。它可能是:

RETRIEVAL - 密码访问
REQUEST - 通过访问控制工作流引发密码访问请求
RESET - 密码重置
AUTOLOGON - "开放连接"请求

用户组织名称 - 请求用户的组织名称
用户账户组织名称 - 请求账户所在的组织名称
除此之外,额外的列如下所示:
资源附加字段 - 资源@<field_name>
账户附加字段 - 账户@<field_name>

访问工单系统的凭证

AUTHTOKEN - 集成界面给出的认证令牌值
TICKETINGSYSTEMURL - 集成界面给出的URL


高级配置明细

ISPMPTICKETCRITERIA - 查看PMP/工单系统是否已配置

(Boolean - true or false)


PMPTICKETCRITERIACOLUMNS - PMP和工单系统之间的映射信息。数组中每个元素代表一个标准。例如,PMP'用户账户'列必须与工单系统'REQUESTER'列相匹配,'C1'中的验证标准为'EQUAL'

JSONArray - [ ["C1","User Account","REQUESTER","EQUAL"],
["C2","PMP User Name","TECHNICIAN","EQUAL"] ]


PMPTICKETCRITERIA - 指定不同的标准之间的关系。'PMPTICKETCRITERIACOLUMNS'中的每个元素的第一个参数作为标准名称 。它给出了标准之间的关系

(String - Example: C1 or C2)


ISTICKETVALUECRITERIA - 检查工单系统的验证值是否已配置

(Boolean - true or false)


TICKETVALUECRITERIACOLUMNS - 工单满足的映射明细。数组中每个元素代表一个标准。例如,标准'C1'中,工单'STATUS'列必须为其他值而不是'Closed'

JSONArray - [ ["C1","STATUS","Closed","NOT_EQUAL"],
["C2","URGENCY","high","EQUAL"],
["C3","IMPACT","high","EQUAL"] ]


TICKETVALUECRITERIA - 指定不同的标准之间的关系。'TICKETVALUECRITERIACOLUMNS''中的每个元素的第一个参数作为标准名称。它给出了标准之间的关系

(String - Example: C1 or (C2 and C3)


ISTICKETCHANGEIDSTATUS - 检查验证系统变更状态是否已配置(true或false)
TICKETCHANGEIDSTATUS - 关联工单ID值的'变更ID状态'


匹配参数

EQUAL - 两个参数的值相同
NOT_EQUAL - 两个参数的值不同
CONTAINS -包含第二个参数的值
NOT_CONTAINS - 第一个参数值不包含第二个参数的值
STARTS_WITH - 第一个参数必须从第二个参数的值开始
ENDS_WITH - 第一个参数必须与第二个参数的值结束
(比较参数的日期)
LESS_THAN - 第一个参数日期值应小于第二个
GREATER_THAN - 第一个参数日期值应大于第二个
LESS_THAN_EQUAL - 第一个参数日期值应该小于或等于第二个
GREATER_THAN_EQUAL - 第一个参数日期值应该大于或等于第二个
根据匹配参数,得到验证。


ServiceNow定制实现的代码片断

如果高级配置不满足你的要求,你可以有一个定制的实现类。您可以扩展PMP提供的默认实现类和额外功能。下面的例子展示了如何将ServiceNow创建的默认实现类扩展为自定义实现类。

package com.manageengine.ts;
import java.util.Properties;
import org.json.simple.JSONObject;
import com.adventnet.passtrix.helpdesk.ServiceNowImpl;

//ServiceNow custom implementation
public class ServiceNowCustomImpl extends ServiceNowImpl
{
  public boolean checkViewHelpDeskRequest(String ticketId, Properties pmpColumns, Properties credentialDetails, JSONObject criteriaDetails)
   throws Exception
  {
	boolean result = super.checkViewHelpDeskRequest(ticketId, pmpColumns, credentialDetails, criteriaDetails);
	//Your own implementation
	return result;
  }
}


下表列出了易于与PMP集成的工单系统的默认功能处理类:

ServiceDesk Plus On-Demand

com.adventnet.passtrix.helpdesk.ServiceDeskPlusOnDemandImpl

ServiceDesk Plus MSP

com.adventnet.passtrix.helpdesk.ServiceDeskPlusMSPImpl

ServiceDesk Plus

com.adventnet.passtrix.helpdesk.ServiceDeskPlusOnPremiseImpl

ServiceNow

com.adventnet.passtrix.helpdesk.ServiceNowImpl



接口描述

工单系统集成的接口:

package com.manageengine.ts;

import java.util.Properties;
import org.json.simple.JSONObject;

// This class provides the methods to implement ticketing system integration. You need to implement this interface
public interface TicketingSystemInterface
{
  /**
   * Used to display the error message while doing the ticketing system related operations. The output gets reflected in audit trails.
   * @return Error message, if the ticketing system accessible, return null. Otherwise, return a proper error message.
   */
  public String getErrorMsg();
	
  /**
   * Used to return the properties related to the ticketing system operation
   * @return Comments and needed message
   */
  public Properties getRequestProperties();
	
  /**
   * Used for testing configuration setup. While testing, administrator will be able to get ticket details from the ticketing system.
   * @param tsName Ticketing system Name
   * @param tsUrl Ticketing system Web URL
   * @param authToken Authentication Token assigned to a technician of ticketing system (Base64 authorization string constructed 
                      using login credentials in the case of ServiceNow ticketing system)
   * @param ticketId Ticket ID given as the input  ((Ticket ID/Sys ID in the case of ServiceNow ticketing system)
   * @param Ticketing System operation type
   * 	{@value 0} Ticketing Operation
   * 	{@value 1} Change Related Operation
   * @return the output from ticketing side
   * @throws Exception
   */
  public JSONObject helpdeskCheck(String tsName, String tsUrl, String authToken, String ticketId, String operation) throws Exception;
	
  /**
   * Actual function that will be called upon whenever a ticketing system related operation is done from PMP GUI
   * @param ticketId Ticket ID (Ticket ID/Sys ID in the case of ServiceNow ticketing system)
   * @param pmpColumns Details of the PMP account for which ticketing system query is raised
   * @param credentialDetails Key details of ticketing system (Authentication token or Base64 authorization string 
                      and web URL of ticketing system)
   * @param criteriaDetails Criteria mapping done as part of advanced configuration
   * @return Final output that will be sent to PMP server
   * 	{@value true} Success case - Allows the operation to proceed
   * 	{@value false} Failure case - Denies the operation to proceed
   * @throws Exception
   */
  public boolean checkViewHelpDeskRequest(String ticketId, Properties pmpColumns, Properties credentialDetails, JSONObject criteriaDetails)
   throws Exception;
		
}

版权所有 ©2016, 卓豪(北京)技术有限公司,保留一切权利。

顶部