当前位置: 首页 > 面试题库 >

HP ALM Rest API 401身份验证错误?

方光华
2023-03-14
问题内容

我正在使用HP ALM版本12.55.113。我正在尝试通过REST-
API自动上传测试结果。经过身份验证并尝试读取一个简单的缺陷后,我收到了401未经身份验证的错误。我使用以下示例代码检索有效的LWSSO和QCSession
Cookie:

public class App {

    private static final String almURL = "http://something.com/qcbin";
    private static final String isAuthenticatedPath = "authentication-point/authenticate";
    private static final String qcSiteSession = "rest/site-session";
    private static final String authTest = "rest/is-authenticated";
    private static final String logoutPath = "authentication-point/logout";
    private static String lswoocookie;
    private static String qcsessioncookie;

    public static String strDomain = "domain";
    public static String strProject = "project";
    public static String strUserName = "user";
    public static String strPassword = "pass";

    public static Client client;
    public static WebTarget target;
    public static Invocation.Builder invocationBuilder;
    public static Response res;

    private static String getEncodedAuthString() {
        String auth = strUserName + ":" + strPassword;
        byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes());
        String authHeader = "Basic " + new String(encodedAuth);

        return authHeader;
    }

    private static void loggedIn() {
        WebTarget targeta = client.target(almURL).path(authTest);
        invocationBuilder = targeta.request();
        invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
        Response resa = invocationBuilder.get();
        System.out.println("Logged in: " + resa);
    }

    public static void main(String args[]) {
        client = ClientBuilder.newBuilder().build();
        loggedIn();
        /* Get LWSSO Cookie */
        target = client.target(almURL).path(isAuthenticatedPath);
        invocationBuilder = target.request(new String[] { "application/xml" });
        invocationBuilder.header("Authorization", getEncodedAuthString());
        res = invocationBuilder.get();
        System.out.println(res);
        lswoocookie = res.getCookies().get("LWSSO_COOKIE_KEY").getValue();
        System.out.println("LSWOO: " + lswoocookie);

        /* Get QCSession Cookie */
        target = client.target(almURL).path(qcSiteSession);
        invocationBuilder = target.request(new String[] { "application/json" });
        invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
        res = invocationBuilder.post(null);
        qcsessioncookie = res.getCookies().get("QCSession").getValue();
        System.out.println("QCSession: " + qcsessioncookie);
        System.out.println(target);

        /* Get the first defect */
        String midPoint = "rest/domains/" + strDomain + "/projects/" + strProject;
        target = client.target(almURL).path(midPoint).path("defects/1");
        invocationBuilder = target.request(new String[] { "application/json" });
        invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
        invocationBuilder.cookie("QCSession", qcsessioncookie);
        res = invocationBuilder.get();
        System.out.println(res);
        loggedIn();

        /* Logout */
        target = client.target(almURL).path(logoutPath);
        invocationBuilder = target.request();
        invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
        invocationBuilder.cookie("QCSession", qcsessioncookie);
        res = invocationBuilder.post(null);
        System.out.println(res);
    }

我得到以下控制台输出:

登录:InboundJaxrsResponse {context = ClientResponse {method = GET,uri =
http://bla.bla:8080 / qcbin / rest / is-
authenticated,状态=
401,原因=身份验证失败。基于浏览器的集成-登录后将’?login-form-required = y’追加到您尝试访问的URL。}}

InboundJaxrsResponse {context = ClientResponse {method = GET,uri =
http://bla.bla/qcbin/authentication-
point/authenticate,状态= 200,原因= OK}}

LSWOO:IvG6JIOKRTAigQV6 …依此类推

QCSession:MTEzNTU …等等

JerseyWebTarget { http://bla.bla:8080 / qcbin / rest / site-
session }

InboundJaxrsResponse {context = ClientResponse {method = GET,uri =
http://bla.bla/qcbin/rest/domains/WARTUNG/projects/Testautomatisierung/defects/1,状态=
401,原因=身份验证失败。基于浏览器的集成-登录后将’?login-form-required = y’追加到您尝试访问的URL。}}

登录:InboundJaxrsResponse {context = ClientResponse {method = GET,uri =
http://bla.bla/qcbin/rest/is-authenticated,状态= 200,原因= OK}}

InboundJaxrsResponse {context = ClientResponse {method = POST,uri =
http://sth.com/qcbin/authentication-
point/logout,状态= 200,原因=
OK}}

有谁知道我做错了什么?尝试了很多方法,但是没有成功。提前致谢 :)


问题答案:

我猜问题是由于QCSession端点的内容类型所致。

public class UpdateALM {    
    private static final String qcbinURI = "https://alm_url/qcbin";
    private static final String isAuthenticatedPath = "rest/is-authenticated";
    private static final String logoutPath = "authentication-point/logout";
    private static final String domainsPath = "rest/domains";
    private static Cookie cookie;

    private String getEncodedAuthString() {
        String auth = strUserName + ":" + strPassword;
        byte[] encodedAuth = Base64.encode(auth.getBytes());
        String authHeader = "Basic " + new String(encodedAuth);

        return authHeader;
    }

    public boolean isAuthenticated() {
        target = client.target(qcbinURI).path(isAuthenticatedPath);
        invocationBuilder = target.request(new String[] { "application/xml" });
        invocationBuilder.cookie(cookie);
        Response res = invocationBuilder.get();
        return res.getStatus() == 200;
    }

    public void updateALMStatus() throws Exception {
        try {           
            target = client.target(
                    "https://alm_url/qcbin").path(
                    "authentication-point/authenticate");
            invocationBuilder = target.request("text", "plain");
            invocationBuilder.header("Authorization", getEncodedAuthString());

            res = invocationBuilder.get();
            cookie = ((Cookie) res.getCookies().get("LWSSO_COOKIE_KEY"));

            getTestSet(test_set);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

请参阅:https
:
//admhelp.microfocus.com/alm/zh/12.60/api_refs/REST_TECH_PREVIEW/ALM_REST_API_TP.html#REST_API_Tech_Preview/General/Authenticate_LWSSO.html%3FTocPath%3DHow%2520to%2520Do%2520Common%2520Tasks%7CAuth__



 类似资料:
  • cluster=hfactory.getOrCreateCluster(“test cluster”,“localhost:9160”,凭据); 但不幸的是,它给了我一个错误: HFactory类型中的方法getOrCreateCluster(String,CassandraHostConfigurator,Map)不适用于参数(String,String,Map)

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 我刚刚开始使用docker。我正在按照此处指定的说明进行操作https://docs.docker.com/windows/step_one/ 我在Windows 10和ran上安装了docker(1.10.2)。但是,当本教程未提及任何内容时,出现了身份验证错误。 这是我收到的消息。 我在google&这里搜索,但找不到与此错误消息相似的内容。 谢谢! 问题答案: 当您运行任何其他d

  • 我正在使用Smack4.1原生库为android开发一个聊天应用程序。我可以在应用程序和服务器之间设置连接,但在登录时,我得到了关于SASL身份验证的SmackException。 null null 这是我的logcat输出。 事先谢谢你的帮助。欢呼:)

  • 我想在CDH-5.3.2版本中使用水槽从twitter获取数据。我已经配置了flume.conf、hbase接收器和twitter源代码。 但是,当我启动代理时,我收到以下错误: flume.conf和hbase接收器代码与此博客相同:http://ahikmat.blogspot.com/2014/08/streaming-twitter-tweets-to-hbase-with.html 而且

  • 在controller文件夹中,我有一个名为fbauth.php的控制器,其中有以下代码 但当我点击facebook链接并尝试连接时,我得到了如下错误 另外,为了进行双重检查,我在Kohana之外创建了这个函数,它没有问题。 我所做的是,在Kohana的外部,我创建了一个名为index.php的文件,在其中我输入了html和Facebook身份验证的标记,然后我创建了一个名为testauth.ph

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容: