构建和使用Cookie进行基于令牌的身份验证,以通过openAM访问api

时间:2015-06-17 15:55:31

标签: java cookies restful-authentication http-token-authentication

请原谅我,如果这些听起来非常愚蠢或缺乏经验,但是我已经到了其他地方,并且无法找到关于如何正确实现这一点的简单解释。

到目前为止,我已经对在openAm上运行的服务器进行了一次调用;该呼叫发送我的用户名和密码凭据并返回给我一个安全令牌。然后,我需要再次进行调用,以便在api中请求某些json文件。

据我所知,在我的第二次静音调用中,我需要以某种方式嵌入令牌,以便服务器知道我可以访问所请求的数据。我的问题是什么是正确的方法来解决这个问题。我发现/听说过多种可能性,例如在标题,参数或cookie中传递它,但每次我的请求被重定向到登录URL而不是返回我的请求。

根据我的理解,似乎cookie方法效果最好(如果我错了,请发布不同的方法)。因此,对于openAm身份验证,如何使用我的令牌正确构建cookie。构建cookie后,如何将其嵌入到连接中。我是否需要建立全新的连接,还是可以将原始连接重定向到cookie?非常感谢任何帮助或建议。

我的一些代码,使用HttpURLConnection:

//takes url and builds our connection
String url = "http://some.url.net/openam/json/authenticate";
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("X-OpenAM-Username", name);
connection.setRequestProperty("X-OpenAM-Password", pass);
connection.setRequestProperty("Content-Type", "application/json");

//takes in the connections response
BufferedReader in = new BufferedReader(new InputStreamReader(response, "UTF-8"));
String output = in.readLine();
//this is to cut the token out of the response
int i = 14;
while(true){
    if (output.charAt(i)=='"'){
        break;
    }
    i++;
}
String token = output.substring(14,i);

//build our new connection and second call
url = "https://other.url.net/api/v1/resource/attributes";
HttpURLConnection request_conn = (HttpURLConnection) new URL(url).openConnection();
/*
request_conn.setRequestProperty("iPlanetDirectoryPro", token);
request_conn.setRequestMethod("POST");
request_conn.connect();
*/    //Tried to put the token through the header, doesnt work

/*
Cookie cookie;
cookie = new Cookie("iPlanetDirectoryPro", token);
cookie.setDomain(".di2e.net");
cookie.setPath("/");
cookie.setSecure(true);     
request_conn.addCookie(cookie);//addCookie() doesnt work for a urlConection?
*/  //Tried building the cookie and adding it to the new conection

0 个答案:

没有答案